Skip to content
Projects
Groups
Snippets
Help
This project
Loading...
Sign in / Register
Toggle navigation
K
k3s
Project
Project
Details
Activity
Cycle Analytics
Repository
Repository
Files
Commits
Branches
Tags
Contributors
Graph
Compare
Charts
Issues
0
Issues
0
List
Board
Labels
Milestones
Merge Requests
0
Merge Requests
0
CI / CD
CI / CD
Pipelines
Jobs
Schedules
Charts
Registry
Registry
Wiki
Wiki
Snippets
Snippets
Members
Members
Collapse sidebar
Close sidebar
Activity
Graph
Charts
Create a new issue
Jobs
Commits
Issue Boards
Open sidebar
Jacklull
k3s
Commits
1f7e9fd9
Unverified
Commit
1f7e9fd9
authored
Jan 30, 2019
by
Kubernetes Prow Robot
Committed by
GitHub
Jan 30, 2019
Browse files
Options
Browse Files
Download
Plain Diff
Merge pull request #73488 from andrewsykim/replace-utils-file
Replace pkg/util/file with k8s.io/utils/path
parents
fb96afb1
bdbef741
Expand all
Hide whitespace changes
Inline
Side-by-side
Showing
53 changed files
with
197 additions
and
413 deletions
+197
-413
Godeps.json
Godeps/Godeps.json
+13
-9
LICENSES
Godeps/LICENSES
+0
-0
.import-restrictions
cmd/kubeadm/.import-restrictions
+1
-1
server.go
cmd/kubelet/app/server.go
+4
-1
.golint_failures
hack/.golint_failures
+0
-1
.import-restrictions
pkg/controller/.import-restrictions
+1
-1
.import-restrictions
pkg/kubectl/.import-restrictions
+1
-1
BUILD
pkg/kubelet/BUILD
+1
-1
BUILD
pkg/kubelet/cm/BUILD
+1
-1
container_manager_linux.go
pkg/kubelet/cm/container_manager_linux.go
+3
-3
kubelet_getters.go
pkg/kubelet/kubelet_getters.go
+2
-2
BUILD
pkg/kubelet/volumemanager/reconciler/BUILD
+1
-1
reconciler.go
pkg/kubelet/volumemanager/reconciler/reconciler.go
+2
-2
BUILD
pkg/master/tunneler/BUILD
+1
-1
ssh.go
pkg/master/tunneler/ssh.go
+3
-3
BUILD
pkg/security/apparmor/BUILD
+1
-1
validate.go
pkg/security/apparmor/validate.go
+2
-2
BUILD
pkg/util/BUILD
+0
-1
file_test.go
pkg/util/file/file_test.go
+0
-149
BUILD
pkg/util/mount/BUILD
+2
-2
mount_linux.go
pkg/util/mount/mount_linux.go
+2
-2
mount_windows.go
pkg/util/mount/mount_windows.go
+2
-2
nsenter_mount.go
pkg/util/mount/nsenter_mount.go
+2
-2
BUILD
pkg/volume/gcepd/BUILD
+1
-1
gce_util.go
pkg/volume/gcepd/gce_util.go
+2
-2
BUILD
pkg/volume/host_path/BUILD
+1
-1
host_path_test.go
pkg/volume/host_path/host_path_test.go
+2
-2
BUILD
pkg/volume/rbd/BUILD
+1
-1
rbd_util.go
pkg/volume/rbd/rbd_util.go
+2
-2
Godeps.json
...ing/src/k8s.io/apiextensions-apiserver/Godeps/Godeps.json
+3
-3
Godeps.json
staging/src/k8s.io/apiserver/Godeps/Godeps.json
+4
-4
Godeps.json
staging/src/k8s.io/cli-runtime/Godeps/Godeps.json
+1
-1
Godeps.json
staging/src/k8s.io/client-go/Godeps/Godeps.json
+3
-3
Godeps.json
staging/src/k8s.io/cloud-provider/Godeps/Godeps.json
+3
-3
Godeps.json
staging/src/k8s.io/component-base/Godeps/Godeps.json
+1
-1
Godeps.json
staging/src/k8s.io/csi-api/Godeps/Godeps.json
+3
-3
Godeps.json
staging/src/k8s.io/kube-aggregator/Godeps/Godeps.json
+3
-3
Godeps.json
...ing/src/k8s.io/kube-controller-manager/Godeps/Godeps.json
+1
-1
Godeps.json
staging/src/k8s.io/kube-proxy/Godeps/Godeps.json
+1
-1
Godeps.json
staging/src/k8s.io/kube-scheduler/Godeps/Godeps.json
+1
-1
Godeps.json
staging/src/k8s.io/metrics/Godeps/Godeps.json
+1
-1
Godeps.json
staging/src/k8s.io/node-api/Godeps/Godeps.json
+3
-3
Godeps.json
staging/src/k8s.io/sample-apiserver/Godeps/Godeps.json
+3
-3
Godeps.json
staging/src/k8s.io/sample-cli-plugin/Godeps/Godeps.json
+1
-1
Godeps.json
staging/src/k8s.io/sample-controller/Godeps/Godeps.json
+3
-3
BUILD
vendor/BUILD
+1
-0
BUILD
vendor/k8s.io/utils/nsenter/BUILD
+0
-2
exec.go
vendor/k8s.io/utils/nsenter/exec.go
+0
-67
exec_unsupported.go
vendor/k8s.io/utils/nsenter/exec_unsupported.go
+0
-58
nsenter.go
vendor/k8s.io/utils/nsenter/nsenter.go
+40
-17
nsenter_unsupported.go
vendor/k8s.io/utils/nsenter/nsenter_unsupported.go
+29
-6
BUILD
vendor/k8s.io/utils/path/BUILD
+5
-18
file.go
vendor/k8s.io/utils/path/file.go
+33
-12
No files found.
Godeps/Godeps.json
View file @
1f7e9fd9
...
@@ -4090,39 +4090,43 @@
...
@@ -4090,39 +4090,43 @@
},
},
{
{
"ImportPath"
:
"k8s.io/utils/buffer"
,
"ImportPath"
:
"k8s.io/utils/buffer"
,
"Rev"
:
"
8a87304934321b4b0ad72a7cb3cbc715d67d38c7
"
"Rev"
:
"
ed37f7428a91fc2a81070808937195dcd46d320e
"
},
},
{
{
"ImportPath"
:
"k8s.io/utils/clock"
,
"ImportPath"
:
"k8s.io/utils/clock"
,
"Rev"
:
"
8a87304934321b4b0ad72a7cb3cbc715d67d38c7
"
"Rev"
:
"
ed37f7428a91fc2a81070808937195dcd46d320e
"
},
},
{
{
"ImportPath"
:
"k8s.io/utils/exec"
,
"ImportPath"
:
"k8s.io/utils/exec"
,
"Rev"
:
"
8a87304934321b4b0ad72a7cb3cbc715d67d38c7
"
"Rev"
:
"
ed37f7428a91fc2a81070808937195dcd46d320e
"
},
},
{
{
"ImportPath"
:
"k8s.io/utils/exec/testing"
,
"ImportPath"
:
"k8s.io/utils/exec/testing"
,
"Rev"
:
"
8a87304934321b4b0ad72a7cb3cbc715d67d38c7
"
"Rev"
:
"
ed37f7428a91fc2a81070808937195dcd46d320e
"
},
},
{
{
"ImportPath"
:
"k8s.io/utils/integer"
,
"ImportPath"
:
"k8s.io/utils/integer"
,
"Rev"
:
"
8a87304934321b4b0ad72a7cb3cbc715d67d38c7
"
"Rev"
:
"
ed37f7428a91fc2a81070808937195dcd46d320e
"
},
},
{
{
"ImportPath"
:
"k8s.io/utils/io"
,
"ImportPath"
:
"k8s.io/utils/io"
,
"Rev"
:
"
8a87304934321b4b0ad72a7cb3cbc715d67d38c7
"
"Rev"
:
"
ed37f7428a91fc2a81070808937195dcd46d320e
"
},
},
{
{
"ImportPath"
:
"k8s.io/utils/nsenter"
,
"ImportPath"
:
"k8s.io/utils/nsenter"
,
"Rev"
:
"8a87304934321b4b0ad72a7cb3cbc715d67d38c7"
"Rev"
:
"ed37f7428a91fc2a81070808937195dcd46d320e"
},
{
"ImportPath"
:
"k8s.io/utils/path"
,
"Rev"
:
"ed37f7428a91fc2a81070808937195dcd46d320e"
},
},
{
{
"ImportPath"
:
"k8s.io/utils/pointer"
,
"ImportPath"
:
"k8s.io/utils/pointer"
,
"Rev"
:
"
8a87304934321b4b0ad72a7cb3cbc715d67d38c7
"
"Rev"
:
"
ed37f7428a91fc2a81070808937195dcd46d320e
"
},
},
{
{
"ImportPath"
:
"k8s.io/utils/trace"
,
"ImportPath"
:
"k8s.io/utils/trace"
,
"Rev"
:
"
8a87304934321b4b0ad72a7cb3cbc715d67d38c7
"
"Rev"
:
"
ed37f7428a91fc2a81070808937195dcd46d320e
"
},
},
{
{
"ImportPath"
:
"sigs.k8s.io/yaml"
,
"ImportPath"
:
"sigs.k8s.io/yaml"
,
...
...
Godeps/LICENSES
View file @
1f7e9fd9
This diff is collapsed.
Click to expand it.
cmd/kubeadm/.import-restrictions
View file @
1f7e9fd9
...
@@ -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",
...
...
cmd/kubelet/app/server.go
View file @
1f7e9fd9
...
@@ -369,7 +369,10 @@ func UnsecuredDependencies(s *options.KubeletServer) (*kubelet.Dependencies, err
...
@@ -369,7 +369,10 @@ func UnsecuredDependencies(s *options.KubeletServer) (*kubelet.Dependencies, err
}
}
mounter
=
mount
.
NewNsenterMounter
(
s
.
RootDirectory
,
ne
)
mounter
=
mount
.
NewNsenterMounter
(
s
.
RootDirectory
,
ne
)
// an exec interface which can use nsenter for flex plugin calls
// an exec interface which can use nsenter for flex plugin calls
pluginRunner
=
nsenter
.
NewNsenterExecutor
(
nsenter
.
DefaultHostRootFsPath
,
exec
.
New
())
pluginRunner
,
err
=
nsenter
.
NewNsenter
(
nsenter
.
DefaultHostRootFsPath
,
exec
.
New
())
if
err
!=
nil
{
return
nil
,
err
}
}
}
var
dockerClientConfig
*
dockershim
.
ClientConfig
var
dockerClientConfig
*
dockershim
.
ClientConfig
...
...
hack/.golint_failures
View file @
1f7e9fd9
...
@@ -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
...
...
pkg/controller/.import-restrictions
View file @
1f7e9fd9
...
@@ -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"
]
]
...
...
pkg/kubectl/.import-restrictions
View file @
1f7e9fd9
...
@@ -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": []
...
...
pkg/kubelet/BUILD
View file @
1f7e9fd9
...
@@ -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",
],
],
)
)
...
...
pkg/kubelet/cm/BUILD
View file @
1f7e9fd9
...
@@ -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",
...
...
pkg/kubelet/cm/container_manager_linux.go
View file @
1f7e9fd9
...
@@ -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
:=
util
file
.
FileExists
(
path
.
Join
(
cpuMountPoint
,
"cpu.cfs_period_us"
))
periodExists
,
err
:=
util
path
.
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
:=
util
file
.
FileExists
(
path
.
Join
(
cpuMountPoint
,
"cpu.cfs_quota_us"
))
quotaExists
,
err
:=
util
path
.
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
)
}
}
...
...
pkg/kubelet/kubelet_getters.go
View file @
1f7e9fd9
...
@@ -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
:=
util
file
.
ReadDirNoStat
(
volumePluginPath
)
volumeDirs
,
err
:=
util
path
.
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
)
}
}
...
...
pkg/kubelet/volumemanager/reconciler/BUILD
View file @
1f7e9fd9
...
@@ -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",
],
],
)
)
...
...
pkg/kubelet/volumemanager/reconciler/reconciler.go
View file @
1f7e9fd9
...
@@ -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
:=
util
file
.
ReadDirNoStat
(
volumePluginPath
)
volumePluginDirs
,
err
:=
util
path
.
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
...
...
pkg/master/tunneler/BUILD
View file @
1f7e9fd9
...
@@ -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",
],
],
)
)
...
...
pkg/master/tunneler/ssh.go
View file @
1f7e9fd9
...
@@ -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"
util
file
"k8s.io/kubernetes/pkg/util/file
"
util
path
"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
:=
util
file
.
FileExists
(
publicKeyFile
)
exists
,
err
:=
util
path
.
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
:=
util
file
.
FileExists
(
privateKeyfile
)
exists
,
err
:=
util
path
.
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
{
...
...
pkg/security/apparmor/BUILD
View file @
1f7e9fd9
...
@@ -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",
],
],
)
)
...
...
pkg/security/apparmor/validate.go
View file @
1f7e9fd9
...
@@ -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"
util
file
"k8s.io/kubernetes/pkg/util/file
"
util
path
"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
:=
util
file
.
FileExists
(
appArmorFS
);
!
ok
{
if
ok
,
err
:=
util
path
.
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
)
...
...
pkg/util/BUILD
View file @
1f7e9fd9
...
@@ -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",
...
...
pkg/util/file/file_test.go
deleted
100644 → 0
View file @
fb96afb1
/*
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
)
}
}
})
}
pkg/util/mount/BUILD
View file @
1f7e9fd9
...
@@ -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": [],
}),
}),
...
...
pkg/util/mount/mount_linux.go
View file @
1f7e9fd9
...
@@ -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
util
file
.
FileExists
(
pathname
)
return
util
path
.
Exists
(
utilpath
.
CheckFollowSymlink
,
pathname
)
}
}
func
(
mounter
*
Mounter
)
EvalHostSymlinks
(
pathname
string
)
(
string
,
error
)
{
func
(
mounter
*
Mounter
)
EvalHostSymlinks
(
pathname
string
)
(
string
,
error
)
{
...
...
pkg/util/mount/mount_windows.go
View file @
1f7e9fd9
...
@@ -30,7 +30,7 @@ import (
...
@@ -30,7 +30,7 @@ import (
"k8s.io/klog"
"k8s.io/klog"
util
file
"k8s.io/kubernetes/pkg/util/file
"
util
path
"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
util
file
.
FileExists
(
pathname
)
return
util
path
.
Exists
(
utilpath
.
CheckFollowSymlink
,
pathname
)
}
}
// EvalHostSymlinks returns the path name after evaluating symlinks
// EvalHostSymlinks returns the path name after evaluating symlinks
...
...
pkg/util/mount/nsenter_mount.go
View file @
1f7e9fd9
...
@@ -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
util
file
.
FileExists
(
kubeletpath
)
return
util
path
.
Exists
(
utilpath
.
CheckFollowSymlink
,
kubeletpath
)
}
}
func
(
mounter
*
NsenterMounter
)
EvalHostSymlinks
(
pathname
string
)
(
string
,
error
)
{
func
(
mounter
*
NsenterMounter
)
EvalHostSymlinks
(
pathname
string
)
(
string
,
error
)
{
...
...
pkg/volume/gcepd/BUILD
View file @
1f7e9fd9
...
@@ -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",
],
],
)
)
...
...
pkg/volume/gcepd/gce_util.go
View file @
1f7e9fd9
...
@@ -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
:=
util
file
.
FileExists
(
"/lib/udev/scsi_id"
)
exists
,
err
:=
util
path
.
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
)
}
}
...
...
pkg/volume/host_path/BUILD
View file @
1f7e9fd9
...
@@ -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",
],
],
)
)
...
...
pkg/volume/host_path/host_path_test.go
View file @
1f7e9fd9
...
@@ -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
,
_
:=
util
file
.
FileExists
(
tempPath
);
exists
{
if
exists
,
_
:=
util
path
.
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
)
}
}
}
}
...
...
pkg/volume/rbd/BUILD
View file @
1f7e9fd9
...
@@ -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",
],
],
)
)
...
...
pkg/volume/rbd/rbd_util.go
View file @
1f7e9fd9
...
@@ -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
}
}
...
...
staging/src/k8s.io/apiextensions-apiserver/Godeps/Godeps.json
View file @
1f7e9fd9
...
@@ -2556,15 +2556,15 @@
...
@@ -2556,15 +2556,15 @@
},
},
{
{
"ImportPath"
:
"k8s.io/utils/buffer"
,
"ImportPath"
:
"k8s.io/utils/buffer"
,
"Rev"
:
"
8a87304934321b4b0ad72a7cb3cbc715d67d38c7
"
"Rev"
:
"
ed37f7428a91fc2a81070808937195dcd46d320e
"
},
},
{
{
"ImportPath"
:
"k8s.io/utils/integer"
,
"ImportPath"
:
"k8s.io/utils/integer"
,
"Rev"
:
"
8a87304934321b4b0ad72a7cb3cbc715d67d38c7
"
"Rev"
:
"
ed37f7428a91fc2a81070808937195dcd46d320e
"
},
},
{
{
"ImportPath"
:
"k8s.io/utils/trace"
,
"ImportPath"
:
"k8s.io/utils/trace"
,
"Rev"
:
"
8a87304934321b4b0ad72a7cb3cbc715d67d38c7
"
"Rev"
:
"
ed37f7428a91fc2a81070808937195dcd46d320e
"
},
},
{
{
"ImportPath"
:
"sigs.k8s.io/yaml"
,
"ImportPath"
:
"sigs.k8s.io/yaml"
,
...
...
staging/src/k8s.io/apiserver/Godeps/Godeps.json
View file @
1f7e9fd9
...
@@ -2052,19 +2052,19 @@
...
@@ -2052,19 +2052,19 @@
},
},
{
{
"ImportPath"
:
"k8s.io/utils/buffer"
,
"ImportPath"
:
"k8s.io/utils/buffer"
,
"Rev"
:
"
8a87304934321b4b0ad72a7cb3cbc715d67d38c7
"
"Rev"
:
"
ed37f7428a91fc2a81070808937195dcd46d320e
"
},
},
{
{
"ImportPath"
:
"k8s.io/utils/integer"
,
"ImportPath"
:
"k8s.io/utils/integer"
,
"Rev"
:
"
8a87304934321b4b0ad72a7cb3cbc715d67d38c7
"
"Rev"
:
"
ed37f7428a91fc2a81070808937195dcd46d320e
"
},
},
{
{
"ImportPath"
:
"k8s.io/utils/pointer"
,
"ImportPath"
:
"k8s.io/utils/pointer"
,
"Rev"
:
"
8a87304934321b4b0ad72a7cb3cbc715d67d38c7
"
"Rev"
:
"
ed37f7428a91fc2a81070808937195dcd46d320e
"
},
},
{
{
"ImportPath"
:
"k8s.io/utils/trace"
,
"ImportPath"
:
"k8s.io/utils/trace"
,
"Rev"
:
"
8a87304934321b4b0ad72a7cb3cbc715d67d38c7
"
"Rev"
:
"
ed37f7428a91fc2a81070808937195dcd46d320e
"
},
},
{
{
"ImportPath"
:
"sigs.k8s.io/yaml"
,
"ImportPath"
:
"sigs.k8s.io/yaml"
,
...
...
staging/src/k8s.io/cli-runtime/Godeps/Godeps.json
View file @
1f7e9fd9
...
@@ -612,7 +612,7 @@
...
@@ -612,7 +612,7 @@
},
},
{
{
"ImportPath"
:
"k8s.io/utils/integer"
,
"ImportPath"
:
"k8s.io/utils/integer"
,
"Rev"
:
"
8a87304934321b4b0ad72a7cb3cbc715d67d38c7
"
"Rev"
:
"
ed37f7428a91fc2a81070808937195dcd46d320e
"
},
},
{
{
"ImportPath"
:
"sigs.k8s.io/yaml"
,
"ImportPath"
:
"sigs.k8s.io/yaml"
,
...
...
staging/src/k8s.io/client-go/Godeps/Godeps.json
View file @
1f7e9fd9
...
@@ -616,15 +616,15 @@
...
@@ -616,15 +616,15 @@
},
},
{
{
"ImportPath"
:
"k8s.io/utils/buffer"
,
"ImportPath"
:
"k8s.io/utils/buffer"
,
"Rev"
:
"
8a87304934321b4b0ad72a7cb3cbc715d67d38c7
"
"Rev"
:
"
ed37f7428a91fc2a81070808937195dcd46d320e
"
},
},
{
{
"ImportPath"
:
"k8s.io/utils/integer"
,
"ImportPath"
:
"k8s.io/utils/integer"
,
"Rev"
:
"
8a87304934321b4b0ad72a7cb3cbc715d67d38c7
"
"Rev"
:
"
ed37f7428a91fc2a81070808937195dcd46d320e
"
},
},
{
{
"ImportPath"
:
"k8s.io/utils/trace"
,
"ImportPath"
:
"k8s.io/utils/trace"
,
"Rev"
:
"
8a87304934321b4b0ad72a7cb3cbc715d67d38c7
"
"Rev"
:
"
ed37f7428a91fc2a81070808937195dcd46d320e
"
},
},
{
{
"ImportPath"
:
"sigs.k8s.io/yaml"
,
"ImportPath"
:
"sigs.k8s.io/yaml"
,
...
...
staging/src/k8s.io/cloud-provider/Godeps/Godeps.json
View file @
1f7e9fd9
...
@@ -972,15 +972,15 @@
...
@@ -972,15 +972,15 @@
},
},
{
{
"ImportPath"
:
"k8s.io/utils/buffer"
,
"ImportPath"
:
"k8s.io/utils/buffer"
,
"Rev"
:
"
8a87304934321b4b0ad72a7cb3cbc715d67d38c7
"
"Rev"
:
"
ed37f7428a91fc2a81070808937195dcd46d320e
"
},
},
{
{
"ImportPath"
:
"k8s.io/utils/integer"
,
"ImportPath"
:
"k8s.io/utils/integer"
,
"Rev"
:
"
8a87304934321b4b0ad72a7cb3cbc715d67d38c7
"
"Rev"
:
"
ed37f7428a91fc2a81070808937195dcd46d320e
"
},
},
{
{
"ImportPath"
:
"k8s.io/utils/trace"
,
"ImportPath"
:
"k8s.io/utils/trace"
,
"Rev"
:
"
8a87304934321b4b0ad72a7cb3cbc715d67d38c7
"
"Rev"
:
"
ed37f7428a91fc2a81070808937195dcd46d320e
"
},
},
{
{
"ImportPath"
:
"sigs.k8s.io/yaml"
,
"ImportPath"
:
"sigs.k8s.io/yaml"
,
...
...
staging/src/k8s.io/component-base/Godeps/Godeps.json
View file @
1f7e9fd9
...
@@ -152,7 +152,7 @@
...
@@ -152,7 +152,7 @@
},
},
{
{
"ImportPath"
:
"k8s.io/utils/pointer"
,
"ImportPath"
:
"k8s.io/utils/pointer"
,
"Rev"
:
"
8a87304934321b4b0ad72a7cb3cbc715d67d38c7
"
"Rev"
:
"
ed37f7428a91fc2a81070808937195dcd46d320e
"
}
}
]
]
}
}
staging/src/k8s.io/csi-api/Godeps/Godeps.json
View file @
1f7e9fd9
...
@@ -548,15 +548,15 @@
...
@@ -548,15 +548,15 @@
},
},
{
{
"ImportPath"
:
"k8s.io/utils/buffer"
,
"ImportPath"
:
"k8s.io/utils/buffer"
,
"Rev"
:
"
8a87304934321b4b0ad72a7cb3cbc715d67d38c7
"
"Rev"
:
"
ed37f7428a91fc2a81070808937195dcd46d320e
"
},
},
{
{
"ImportPath"
:
"k8s.io/utils/integer"
,
"ImportPath"
:
"k8s.io/utils/integer"
,
"Rev"
:
"
8a87304934321b4b0ad72a7cb3cbc715d67d38c7
"
"Rev"
:
"
ed37f7428a91fc2a81070808937195dcd46d320e
"
},
},
{
{
"ImportPath"
:
"k8s.io/utils/trace"
,
"ImportPath"
:
"k8s.io/utils/trace"
,
"Rev"
:
"
8a87304934321b4b0ad72a7cb3cbc715d67d38c7
"
"Rev"
:
"
ed37f7428a91fc2a81070808937195dcd46d320e
"
},
},
{
{
"ImportPath"
:
"sigs.k8s.io/yaml"
,
"ImportPath"
:
"sigs.k8s.io/yaml"
,
...
...
staging/src/k8s.io/kube-aggregator/Godeps/Godeps.json
View file @
1f7e9fd9
...
@@ -1832,15 +1832,15 @@
...
@@ -1832,15 +1832,15 @@
},
},
{
{
"ImportPath"
:
"k8s.io/utils/buffer"
,
"ImportPath"
:
"k8s.io/utils/buffer"
,
"Rev"
:
"
8a87304934321b4b0ad72a7cb3cbc715d67d38c7
"
"Rev"
:
"
ed37f7428a91fc2a81070808937195dcd46d320e
"
},
},
{
{
"ImportPath"
:
"k8s.io/utils/integer"
,
"ImportPath"
:
"k8s.io/utils/integer"
,
"Rev"
:
"
8a87304934321b4b0ad72a7cb3cbc715d67d38c7
"
"Rev"
:
"
ed37f7428a91fc2a81070808937195dcd46d320e
"
},
},
{
{
"ImportPath"
:
"k8s.io/utils/trace"
,
"ImportPath"
:
"k8s.io/utils/trace"
,
"Rev"
:
"
8a87304934321b4b0ad72a7cb3cbc715d67d38c7
"
"Rev"
:
"
ed37f7428a91fc2a81070808937195dcd46d320e
"
},
},
{
{
"ImportPath"
:
"sigs.k8s.io/yaml"
,
"ImportPath"
:
"sigs.k8s.io/yaml"
,
...
...
staging/src/k8s.io/kube-controller-manager/Godeps/Godeps.json
View file @
1f7e9fd9
...
@@ -152,7 +152,7 @@
...
@@ -152,7 +152,7 @@
},
},
{
{
"ImportPath"
:
"k8s.io/utils/pointer"
,
"ImportPath"
:
"k8s.io/utils/pointer"
,
"Rev"
:
"
8a87304934321b4b0ad72a7cb3cbc715d67d38c7
"
"Rev"
:
"
ed37f7428a91fc2a81070808937195dcd46d320e
"
}
}
]
]
}
}
staging/src/k8s.io/kube-proxy/Godeps/Godeps.json
View file @
1f7e9fd9
...
@@ -152,7 +152,7 @@
...
@@ -152,7 +152,7 @@
},
},
{
{
"ImportPath"
:
"k8s.io/utils/pointer"
,
"ImportPath"
:
"k8s.io/utils/pointer"
,
"Rev"
:
"
8a87304934321b4b0ad72a7cb3cbc715d67d38c7
"
"Rev"
:
"
ed37f7428a91fc2a81070808937195dcd46d320e
"
}
}
]
]
}
}
staging/src/k8s.io/kube-scheduler/Godeps/Godeps.json
View file @
1f7e9fd9
...
@@ -152,7 +152,7 @@
...
@@ -152,7 +152,7 @@
},
},
{
{
"ImportPath"
:
"k8s.io/utils/pointer"
,
"ImportPath"
:
"k8s.io/utils/pointer"
,
"Rev"
:
"
8a87304934321b4b0ad72a7cb3cbc715d67d38c7
"
"Rev"
:
"
ed37f7428a91fc2a81070808937195dcd46d320e
"
}
}
]
]
}
}
staging/src/k8s.io/metrics/Godeps/Godeps.json
View file @
1f7e9fd9
...
@@ -524,7 +524,7 @@
...
@@ -524,7 +524,7 @@
},
},
{
{
"ImportPath"
:
"k8s.io/utils/integer"
,
"ImportPath"
:
"k8s.io/utils/integer"
,
"Rev"
:
"
8a87304934321b4b0ad72a7cb3cbc715d67d38c7
"
"Rev"
:
"
ed37f7428a91fc2a81070808937195dcd46d320e
"
},
},
{
{
"ImportPath"
:
"sigs.k8s.io/yaml"
,
"ImportPath"
:
"sigs.k8s.io/yaml"
,
...
...
staging/src/k8s.io/node-api/Godeps/Godeps.json
View file @
1f7e9fd9
...
@@ -548,15 +548,15 @@
...
@@ -548,15 +548,15 @@
},
},
{
{
"ImportPath"
:
"k8s.io/utils/buffer"
,
"ImportPath"
:
"k8s.io/utils/buffer"
,
"Rev"
:
"
8a87304934321b4b0ad72a7cb3cbc715d67d38c7
"
"Rev"
:
"
ed37f7428a91fc2a81070808937195dcd46d320e
"
},
},
{
{
"ImportPath"
:
"k8s.io/utils/integer"
,
"ImportPath"
:
"k8s.io/utils/integer"
,
"Rev"
:
"
8a87304934321b4b0ad72a7cb3cbc715d67d38c7
"
"Rev"
:
"
ed37f7428a91fc2a81070808937195dcd46d320e
"
},
},
{
{
"ImportPath"
:
"k8s.io/utils/trace"
,
"ImportPath"
:
"k8s.io/utils/trace"
,
"Rev"
:
"
8a87304934321b4b0ad72a7cb3cbc715d67d38c7
"
"Rev"
:
"
ed37f7428a91fc2a81070808937195dcd46d320e
"
},
},
{
{
"ImportPath"
:
"sigs.k8s.io/yaml"
,
"ImportPath"
:
"sigs.k8s.io/yaml"
,
...
...
staging/src/k8s.io/sample-apiserver/Godeps/Godeps.json
View file @
1f7e9fd9
...
@@ -1784,15 +1784,15 @@
...
@@ -1784,15 +1784,15 @@
},
},
{
{
"ImportPath"
:
"k8s.io/utils/buffer"
,
"ImportPath"
:
"k8s.io/utils/buffer"
,
"Rev"
:
"
8a87304934321b4b0ad72a7cb3cbc715d67d38c7
"
"Rev"
:
"
ed37f7428a91fc2a81070808937195dcd46d320e
"
},
},
{
{
"ImportPath"
:
"k8s.io/utils/integer"
,
"ImportPath"
:
"k8s.io/utils/integer"
,
"Rev"
:
"
8a87304934321b4b0ad72a7cb3cbc715d67d38c7
"
"Rev"
:
"
ed37f7428a91fc2a81070808937195dcd46d320e
"
},
},
{
{
"ImportPath"
:
"k8s.io/utils/trace"
,
"ImportPath"
:
"k8s.io/utils/trace"
,
"Rev"
:
"
8a87304934321b4b0ad72a7cb3cbc715d67d38c7
"
"Rev"
:
"
ed37f7428a91fc2a81070808937195dcd46d320e
"
},
},
{
{
"ImportPath"
:
"sigs.k8s.io/yaml"
,
"ImportPath"
:
"sigs.k8s.io/yaml"
,
...
...
staging/src/k8s.io/sample-cli-plugin/Godeps/Godeps.json
View file @
1f7e9fd9
...
@@ -576,7 +576,7 @@
...
@@ -576,7 +576,7 @@
},
},
{
{
"ImportPath"
:
"k8s.io/utils/integer"
,
"ImportPath"
:
"k8s.io/utils/integer"
,
"Rev"
:
"
8a87304934321b4b0ad72a7cb3cbc715d67d38c7
"
"Rev"
:
"
ed37f7428a91fc2a81070808937195dcd46d320e
"
},
},
{
{
"ImportPath"
:
"sigs.k8s.io/yaml"
,
"ImportPath"
:
"sigs.k8s.io/yaml"
,
...
...
staging/src/k8s.io/sample-controller/Godeps/Godeps.json
View file @
1f7e9fd9
...
@@ -1156,15 +1156,15 @@
...
@@ -1156,15 +1156,15 @@
},
},
{
{
"ImportPath"
:
"k8s.io/utils/buffer"
,
"ImportPath"
:
"k8s.io/utils/buffer"
,
"Rev"
:
"
8a87304934321b4b0ad72a7cb3cbc715d67d38c7
"
"Rev"
:
"
ed37f7428a91fc2a81070808937195dcd46d320e
"
},
},
{
{
"ImportPath"
:
"k8s.io/utils/integer"
,
"ImportPath"
:
"k8s.io/utils/integer"
,
"Rev"
:
"
8a87304934321b4b0ad72a7cb3cbc715d67d38c7
"
"Rev"
:
"
ed37f7428a91fc2a81070808937195dcd46d320e
"
},
},
{
{
"ImportPath"
:
"k8s.io/utils/trace"
,
"ImportPath"
:
"k8s.io/utils/trace"
,
"Rev"
:
"
8a87304934321b4b0ad72a7cb3cbc715d67d38c7
"
"Rev"
:
"
ed37f7428a91fc2a81070808937195dcd46d320e
"
},
},
{
{
"ImportPath"
:
"sigs.k8s.io/yaml"
,
"ImportPath"
:
"sigs.k8s.io/yaml"
,
...
...
vendor/BUILD
View file @
1f7e9fd9
...
@@ -473,6 +473,7 @@ filegroup(
...
@@ -473,6 +473,7 @@ filegroup(
"//vendor/k8s.io/utils/integer:all-srcs",
"//vendor/k8s.io/utils/integer:all-srcs",
"//vendor/k8s.io/utils/io:all-srcs",
"//vendor/k8s.io/utils/io:all-srcs",
"//vendor/k8s.io/utils/nsenter:all-srcs",
"//vendor/k8s.io/utils/nsenter:all-srcs",
"//vendor/k8s.io/utils/path:all-srcs",
"//vendor/k8s.io/utils/pointer:all-srcs",
"//vendor/k8s.io/utils/pointer:all-srcs",
"//vendor/k8s.io/utils/trace:all-srcs",
"//vendor/k8s.io/utils/trace:all-srcs",
"//vendor/sigs.k8s.io/yaml:all-srcs",
"//vendor/sigs.k8s.io/yaml:all-srcs",
...
...
vendor/k8s.io/utils/nsenter/BUILD
View file @
1f7e9fd9
...
@@ -3,8 +3,6 @@ load("@io_bazel_rules_go//go:def.bzl", "go_library")
...
@@ -3,8 +3,6 @@ load("@io_bazel_rules_go//go:def.bzl", "go_library")
go_library(
go_library(
name = "go_default_library",
name = "go_default_library",
srcs = [
srcs = [
"exec.go",
"exec_unsupported.go",
"nsenter.go",
"nsenter.go",
"nsenter_unsupported.go",
"nsenter_unsupported.go",
],
],
...
...
vendor/k8s.io/utils/nsenter/exec.go
deleted
100644 → 0
View file @
fb96afb1
// +build linux
/*
Copyright 2018 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
nsenter
import
(
"context"
"fmt"
"path/filepath"
"k8s.io/klog"
"k8s.io/utils/exec"
)
// Executor wraps executor interface to be executed via nsenter
type
Executor
struct
{
// Exec implementation
executor
exec
.
Interface
// Path to the host's root proc path
hostProcMountNsPath
string
}
// NewNsenterExecutor returns new nsenter based executor
func
NewNsenterExecutor
(
hostRootFsPath
string
,
executor
exec
.
Interface
)
*
Executor
{
hostProcMountNsPath
:=
filepath
.
Join
(
hostRootFsPath
,
mountNsPath
)
nsExecutor
:=
&
Executor
{
hostProcMountNsPath
:
hostProcMountNsPath
,
executor
:
executor
,
}
return
nsExecutor
}
// Command returns a command wrapped with nenter
func
(
nsExecutor
*
Executor
)
Command
(
cmd
string
,
args
...
string
)
exec
.
Cmd
{
fullArgs
:=
append
([]
string
{
fmt
.
Sprintf
(
"--mount=%s"
,
nsExecutor
.
hostProcMountNsPath
),
"--"
},
append
([]
string
{
cmd
},
args
...
)
...
)
klog
.
V
(
5
)
.
Infof
(
"Running nsenter command: %v %v"
,
nsenterPath
,
fullArgs
)
return
nsExecutor
.
executor
.
Command
(
nsenterPath
,
fullArgs
...
)
}
// CommandContext returns a CommandContext wrapped with nsenter
func
(
nsExecutor
*
Executor
)
CommandContext
(
ctx
context
.
Context
,
cmd
string
,
args
...
string
)
exec
.
Cmd
{
fullArgs
:=
append
([]
string
{
fmt
.
Sprintf
(
"--mount=%s"
,
nsExecutor
.
hostProcMountNsPath
),
"--"
},
append
([]
string
{
cmd
},
args
...
)
...
)
klog
.
V
(
5
)
.
Infof
(
"Running nsenter command: %v %v"
,
nsenterPath
,
fullArgs
)
return
nsExecutor
.
executor
.
CommandContext
(
ctx
,
nsenterPath
,
fullArgs
...
)
}
// LookPath returns a LookPath wrapped with nsenter
func
(
nsExecutor
*
Executor
)
LookPath
(
file
string
)
(
string
,
error
)
{
return
""
,
fmt
.
Errorf
(
"not implemented, error looking up : %s"
,
file
)
}
vendor/k8s.io/utils/nsenter/exec_unsupported.go
deleted
100644 → 0
View file @
fb96afb1
// +build !linux
/*
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
nsenter
import
(
"context"
"fmt"
"k8s.io/utils/exec"
)
// Executor wraps executor interface to be executed via nsenter
type
Executor
struct
{
// Exec implementation
executor
exec
.
Interface
// Path to the host's root proc path
hostProcMountNsPath
string
}
// NewNsenterExecutor returns new nsenter based executor
func
NewNsenterExecutor
(
hostRootFsPath
string
,
executor
exec
.
Interface
)
*
Executor
{
nsExecutor
:=
&
Executor
{
hostProcMountNsPath
:
hostRootFsPath
,
executor
:
executor
,
}
return
nsExecutor
}
// Command returns a command wrapped with nenter
func
(
nsExecutor
*
Executor
)
Command
(
cmd
string
,
args
...
string
)
exec
.
Cmd
{
return
nil
}
// CommandContext returns a CommandContext wrapped with nsenter
func
(
nsExecutor
*
Executor
)
CommandContext
(
ctx
context
.
Context
,
cmd
string
,
args
...
string
)
exec
.
Cmd
{
return
nil
}
// LookPath returns a LookPath wrapped with nsenter
func
(
nsExecutor
*
Executor
)
LookPath
(
file
string
)
(
string
,
error
)
{
return
""
,
fmt
.
Errorf
(
"not implemented, error looking up : %s"
,
file
)
}
vendor/k8s.io/utils/nsenter/nsenter.go
View file @
1f7e9fd9
...
@@ -40,10 +40,13 @@ const (
...
@@ -40,10 +40,13 @@ const (
nsenterPath
=
"nsenter"
nsenterPath
=
"nsenter"
)
)
// Nsenter is part of experimental support for running the kubelet
// Nsenter is a type alias for backward compatibility
type
Nsenter
=
NSEnter
// NSEnter is part of experimental support for running the kubelet
// in a container.
// in a container.
//
//
// N
se
nter requires:
// N
SE
nter requires:
//
//
// 1. Docker >= 1.6 due to the dependency on the slave propagation mode
// 1. Docker >= 1.6 due to the dependency on the slave propagation mode
// of the bind-mount of the kubelet root directory in the container.
// of the bind-mount of the kubelet root directory in the container.
...
@@ -65,20 +68,20 @@ const (
...
@@ -65,20 +68,20 @@ const (
// systemd is installed/enabled in the operating system.
// systemd is installed/enabled in the operating system.
// For more information about mount propagation modes, see:
// For more information about mount propagation modes, see:
// https://www.kernel.org/doc/Documentation/filesystems/sharedsubtree.txt
// https://www.kernel.org/doc/Documentation/filesystems/sharedsubtree.txt
type
N
se
nter
struct
{
type
N
SE
nter
struct
{
// a map of commands to their paths on the host filesystem
// a map of commands to their paths on the host filesystem
paths
map
[
string
]
string
paths
map
[
string
]
string
// Path to the host filesystem, typically "/rootfs". Used only for testing.
// Path to the host filesystem, typically "/rootfs". Used only for testing.
hostRootFsPath
string
hostRootFsPath
string
// Exec implementation
, used only for testing
// Exec implementation
executor
exec
.
Interface
executor
exec
.
Interface
}
}
// NewNsenter constructs a new instance of N
se
nter
// NewNsenter constructs a new instance of N
SE
nter
func
NewNsenter
(
hostRootFsPath
string
,
executor
exec
.
Interface
)
(
*
N
se
nter
,
error
)
{
func
NewNsenter
(
hostRootFsPath
string
,
executor
exec
.
Interface
)
(
*
N
SE
nter
,
error
)
{
ne
:=
&
N
se
nter
{
ne
:=
&
N
SE
nter
{
hostRootFsPath
:
hostRootFsPath
,
hostRootFsPath
:
hostRootFsPath
,
executor
:
executor
,
executor
:
executor
,
}
}
...
@@ -88,7 +91,7 @@ func NewNsenter(hostRootFsPath string, executor exec.Interface) (*Nsenter, error
...
@@ -88,7 +91,7 @@ func NewNsenter(hostRootFsPath string, executor exec.Interface) (*Nsenter, error
return
ne
,
nil
return
ne
,
nil
}
}
func
(
ne
*
N
se
nter
)
initPaths
()
error
{
func
(
ne
*
N
SE
nter
)
initPaths
()
error
{
ne
.
paths
=
map
[
string
]
string
{}
ne
.
paths
=
map
[
string
]
string
{}
binaries
:=
[]
string
{
binaries
:=
[]
string
{
"mount"
,
"mount"
,
...
@@ -122,7 +125,7 @@ func (ne *Nsenter) initPaths() error {
...
@@ -122,7 +125,7 @@ func (ne *Nsenter) initPaths() error {
}
}
// Exec executes nsenter commands in hostProcMountNsPath mount namespace
// Exec executes nsenter commands in hostProcMountNsPath mount namespace
func
(
ne
*
N
se
nter
)
Exec
(
cmd
string
,
args
[]
string
)
exec
.
Cmd
{
func
(
ne
*
N
SE
nter
)
Exec
(
cmd
string
,
args
[]
string
)
exec
.
Cmd
{
hostProcMountNsPath
:=
filepath
.
Join
(
ne
.
hostRootFsPath
,
mountNsPath
)
hostProcMountNsPath
:=
filepath
.
Join
(
ne
.
hostRootFsPath
,
mountNsPath
)
fullArgs
:=
append
([]
string
{
fmt
.
Sprintf
(
"--mount=%s"
,
hostProcMountNsPath
),
"--"
},
fullArgs
:=
append
([]
string
{
fmt
.
Sprintf
(
"--mount=%s"
,
hostProcMountNsPath
),
"--"
},
append
([]
string
{
ne
.
AbsHostPath
(
cmd
)},
args
...
)
...
)
append
([]
string
{
ne
.
AbsHostPath
(
cmd
)},
args
...
)
...
)
...
@@ -130,8 +133,27 @@ func (ne *Nsenter) Exec(cmd string, args []string) exec.Cmd {
...
@@ -130,8 +133,27 @@ func (ne *Nsenter) Exec(cmd string, args []string) exec.Cmd {
return
ne
.
executor
.
Command
(
nsenterPath
,
fullArgs
...
)
return
ne
.
executor
.
Command
(
nsenterPath
,
fullArgs
...
)
}
}
// Command returns a command wrapped with nsenter
func
(
ne
*
NSEnter
)
Command
(
cmd
string
,
args
...
string
)
exec
.
Cmd
{
return
ne
.
Exec
(
cmd
,
args
)
}
// CommandContext returns a CommandContext wrapped with nsenter
func
(
ne
*
NSEnter
)
CommandContext
(
ctx
context
.
Context
,
cmd
string
,
args
...
string
)
exec
.
Cmd
{
hostProcMountNsPath
:=
filepath
.
Join
(
ne
.
hostRootFsPath
,
mountNsPath
)
fullArgs
:=
append
([]
string
{
fmt
.
Sprintf
(
"--mount=%s"
,
hostProcMountNsPath
),
"--"
},
append
([]
string
{
ne
.
AbsHostPath
(
cmd
)},
args
...
)
...
)
klog
.
V
(
5
)
.
Infof
(
"Running nsenter command: %v %v"
,
nsenterPath
,
fullArgs
)
return
ne
.
executor
.
CommandContext
(
ctx
,
nsenterPath
,
fullArgs
...
)
}
// LookPath returns a LookPath wrapped with nsenter
func
(
ne
*
NSEnter
)
LookPath
(
file
string
)
(
string
,
error
)
{
return
""
,
fmt
.
Errorf
(
"not implemented, error looking up : %s"
,
file
)
}
// AbsHostPath returns the absolute runnable path for a specified command
// AbsHostPath returns the absolute runnable path for a specified command
func
(
ne
*
N
se
nter
)
AbsHostPath
(
command
string
)
string
{
func
(
ne
*
N
SE
nter
)
AbsHostPath
(
command
string
)
string
{
path
,
ok
:=
ne
.
paths
[
command
]
path
,
ok
:=
ne
.
paths
[
command
]
if
!
ok
{
if
!
ok
{
return
command
return
command
...
@@ -140,7 +162,7 @@ func (ne *Nsenter) AbsHostPath(command string) string {
...
@@ -140,7 +162,7 @@ func (ne *Nsenter) AbsHostPath(command string) string {
}
}
// SupportsSystemd checks whether command systemd-run exists
// SupportsSystemd checks whether command systemd-run exists
func
(
ne
*
N
se
nter
)
SupportsSystemd
()
(
string
,
bool
)
{
func
(
ne
*
N
SE
nter
)
SupportsSystemd
()
(
string
,
bool
)
{
systemdRunPath
,
ok
:=
ne
.
paths
[
"systemd-run"
]
systemdRunPath
,
ok
:=
ne
.
paths
[
"systemd-run"
]
return
systemdRunPath
,
ok
&&
systemdRunPath
!=
""
return
systemdRunPath
,
ok
&&
systemdRunPath
!=
""
}
}
...
@@ -158,7 +180,7 @@ func (ne *Nsenter) SupportsSystemd() (string, bool) {
...
@@ -158,7 +180,7 @@ func (ne *Nsenter) SupportsSystemd() (string, bool) {
//
//
// BEWARE! EvalSymlinks is not able to detect symlink looks with mustExist=false!
// BEWARE! EvalSymlinks is not able to detect symlink looks with mustExist=false!
// If /tmp/link is symlink to /tmp/link, EvalSymlinks(/tmp/link/foo) returns /tmp/link/foo.
// If /tmp/link is symlink to /tmp/link, EvalSymlinks(/tmp/link/foo) returns /tmp/link/foo.
func
(
ne
*
N
se
nter
)
EvalSymlinks
(
pathname
string
,
mustExist
bool
)
(
string
,
error
)
{
func
(
ne
*
N
SE
nter
)
EvalSymlinks
(
pathname
string
,
mustExist
bool
)
(
string
,
error
)
{
var
args
[]
string
var
args
[]
string
if
mustExist
{
if
mustExist
{
// "realpath -e: all components of the path must exist"
// "realpath -e: all components of the path must exist"
...
@@ -178,16 +200,16 @@ func (ne *Nsenter) EvalSymlinks(pathname string, mustExist bool) (string, error)
...
@@ -178,16 +200,16 @@ func (ne *Nsenter) EvalSymlinks(pathname string, mustExist bool) (string, error)
// KubeletPath returns the path name that can be accessed by containerized
// KubeletPath returns the path name that can be accessed by containerized
// kubelet. It is recommended to resolve symlinks on the host by EvalSymlinks
// kubelet. It is recommended to resolve symlinks on the host by EvalSymlinks
// before calling this function
// before calling this function
func
(
ne
*
N
se
nter
)
KubeletPath
(
pathname
string
)
string
{
func
(
ne
*
N
SE
nter
)
KubeletPath
(
pathname
string
)
string
{
return
filepath
.
Join
(
ne
.
hostRootFsPath
,
pathname
)
return
filepath
.
Join
(
ne
.
hostRootFsPath
,
pathname
)
}
}
// NewFakeNsenter returns a N
se
nter that does not run "nsenter --mount=... --",
// NewFakeNsenter returns a N
SE
nter that does not run "nsenter --mount=... --",
// but runs everything in the same mount namespace as the unit test binary.
// but runs everything in the same mount namespace as the unit test binary.
// rootfsPath is supposed to be a symlink, e.g. /tmp/xyz/rootfs -> /.
// rootfsPath is supposed to be a symlink, e.g. /tmp/xyz/rootfs -> /.
// This fake N
se
nter is enough for most operations, e.g. to resolve symlinks,
// This fake N
SE
nter is enough for most operations, e.g. to resolve symlinks,
// but it's not enough to call /bin/mount - unit tests don't run as root.
// but it's not enough to call /bin/mount - unit tests don't run as root.
func
NewFakeNsenter
(
rootfsPath
string
)
(
*
N
se
nter
,
error
)
{
func
NewFakeNsenter
(
rootfsPath
string
)
(
*
N
SE
nter
,
error
)
{
executor
:=
&
fakeExec
{
executor
:=
&
fakeExec
{
rootfsPath
:
rootfsPath
,
rootfsPath
:
rootfsPath
,
}
}
...
@@ -218,7 +240,7 @@ type fakeExec struct {
...
@@ -218,7 +240,7 @@ type fakeExec struct {
}
}
func
(
f
fakeExec
)
Command
(
cmd
string
,
args
...
string
)
exec
.
Cmd
{
func
(
f
fakeExec
)
Command
(
cmd
string
,
args
...
string
)
exec
.
Cmd
{
// This will intentionaly panic if N
se
nter does not provide enough arguments.
// This will intentionaly panic if N
SE
nter does not provide enough arguments.
realCmd
:=
args
[
2
]
realCmd
:=
args
[
2
]
realArgs
:=
args
[
3
:
]
realArgs
:=
args
[
3
:
]
return
exec
.
New
()
.
Command
(
realCmd
,
realArgs
...
)
return
exec
.
New
()
.
Command
(
realCmd
,
realArgs
...
)
...
@@ -233,3 +255,4 @@ func (fakeExec) CommandContext(ctx context.Context, cmd string, args ...string)
...
@@ -233,3 +255,4 @@ func (fakeExec) CommandContext(ctx context.Context, cmd string, args ...string)
}
}
var
_
exec
.
Interface
=
fakeExec
{}
var
_
exec
.
Interface
=
fakeExec
{}
var
_
exec
.
Interface
=
&
NSEnter
{}
vendor/k8s.io/utils/nsenter/nsenter_unsupported.go
View file @
1f7e9fd9
...
@@ -19,6 +19,9 @@ limitations under the License.
...
@@ -19,6 +19,9 @@ limitations under the License.
package
nsenter
package
nsenter
import
(
import
(
"context"
"fmt"
"k8s.io/utils/exec"
"k8s.io/utils/exec"
)
)
...
@@ -28,29 +31,49 @@ const (
...
@@ -28,29 +31,49 @@ const (
DefaultHostRootFsPath
=
"/rootfs"
DefaultHostRootFsPath
=
"/rootfs"
)
)
// Nsenter is part of experimental support for running the kubelet
// Nsenter is a type alias for backward compatibility
type
Nsenter
=
NSEnter
// NSEnter is part of experimental support for running the kubelet
// in a container.
// in a container.
type
N
se
nter
struct
{
type
N
SE
nter
struct
{
// a map of commands to their paths on the host filesystem
// a map of commands to their paths on the host filesystem
Paths
map
[
string
]
string
Paths
map
[
string
]
string
}
}
// NewNsenter constructs a new instance of N
se
nter
// NewNsenter constructs a new instance of N
SE
nter
func
NewNsenter
(
hostRootFsPath
string
,
executor
exec
.
Interface
)
(
*
Nsenter
,
error
)
{
func
NewNsenter
(
hostRootFsPath
string
,
executor
exec
.
Interface
)
(
*
Nsenter
,
error
)
{
return
&
Nsenter
{},
nil
return
&
Nsenter
{},
nil
}
}
// Exec executes nsenter commands in hostProcMountNsPath mount namespace
// Exec executes nsenter commands in hostProcMountNsPath mount namespace
func
(
ne
*
N
se
nter
)
Exec
(
cmd
string
,
args
[]
string
)
exec
.
Cmd
{
func
(
ne
*
N
SE
nter
)
Exec
(
cmd
string
,
args
[]
string
)
exec
.
Cmd
{
return
nil
return
nil
}
}
// AbsHostPath returns the absolute runnable path for a specified command
// AbsHostPath returns the absolute runnable path for a specified command
func
(
ne
*
N
se
nter
)
AbsHostPath
(
command
string
)
string
{
func
(
ne
*
N
SE
nter
)
AbsHostPath
(
command
string
)
string
{
return
""
return
""
}
}
// SupportsSystemd checks whether command systemd-run exists
// SupportsSystemd checks whether command systemd-run exists
func
(
ne
*
N
se
nter
)
SupportsSystemd
()
(
string
,
bool
)
{
func
(
ne
*
N
SE
nter
)
SupportsSystemd
()
(
string
,
bool
)
{
return
""
,
false
return
""
,
false
}
}
// Command returns a command wrapped with nenter
func
(
ne
*
NSEnter
)
Command
(
cmd
string
,
args
...
string
)
exec
.
Cmd
{
return
nil
}
// CommandContext returns a CommandContext wrapped with nsenter
func
(
ne
*
NSEnter
)
CommandContext
(
ctx
context
.
Context
,
cmd
string
,
args
...
string
)
exec
.
Cmd
{
return
nil
}
// LookPath returns a LookPath wrapped with nsenter
func
(
ne
*
NSEnter
)
LookPath
(
file
string
)
(
string
,
error
)
{
return
""
,
fmt
.
Errorf
(
"not implemented, error looking up : %s"
,
file
)
}
var
_
exec
.
Interface
=
&
NSEnter
{}
pkg/util/file
/BUILD
→
vendor/k8s.io/utils/path
/BUILD
View file @
1f7e9fd9
package(default_visibility = ["//visibility:public"])
load("@io_bazel_rules_go//go:def.bzl", "go_library")
load(
"@io_bazel_rules_go//go:def.bzl",
"go_library",
"go_test",
)
go_library(
go_library(
name = "go_default_library",
name = "go_default_library",
srcs = ["file.go"],
srcs = ["file.go"],
importpath = "k8s.io/kubernetes/pkg/util/file",
importmap = "k8s.io/kubernetes/vendor/k8s.io/utils/path",
importpath = "k8s.io/utils/path",
visibility = ["//visibility:public"],
)
)
filegroup(
filegroup(
...
@@ -23,14 +19,5 @@ filegroup(
...
@@ -23,14 +19,5 @@ filegroup(
name = "all-srcs",
name = "all-srcs",
srcs = [":package-srcs"],
srcs = [":package-srcs"],
tags = ["automanaged"],
tags = ["automanaged"],
)
visibility = ["//visibility:public"],
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",
],
)
)
pkg/util/file
/file.go
→
vendor/k8s.io/utils/path
/file.go
View file @
1f7e9fd9
...
@@ -14,25 +14,46 @@ See the License for the specific language governing permissions and
...
@@ -14,25 +14,46 @@ See the License for the specific language governing permissions and
limitations under the License.
limitations under the License.
*/
*/
package
file
package
path
import
(
import
(
"errors"
"os"
"os"
)
)
// FileExists checks if specified file exists.
// LinkTreatment is the base type for constants used by Exists that indicate
func
FileExists
(
filename
string
)
(
bool
,
error
)
{
// how symlinks are treated for existence checks.
if
_
,
err
:=
os
.
Stat
(
filename
);
os
.
IsNotExist
(
err
)
{
type
LinkTreatment
int
return
false
,
nil
}
else
if
err
!=
nil
{
const
(
return
false
,
err
// CheckFollowSymlink follows the symlink and verifies that the target of
// the symlink exists.
CheckFollowSymlink
LinkTreatment
=
iota
// CheckSymlinkOnly does not follow the symlink and verfies only that they
// symlink itself exists.
CheckSymlinkOnly
)
// ErrInvalidLinkTreatment indicates that the link treatment behavior requested
// is not a valid behavior.
var
ErrInvalidLinkTreatment
=
errors
.
New
(
"unknown link behavior"
)
// Exists checks if specified file, directory, or symlink exists. The behavior
// of the test depends on the linkBehaviour argument. See LinkTreatment for
// more details.
func
Exists
(
linkBehavior
LinkTreatment
,
filename
string
)
(
bool
,
error
)
{
var
err
error
if
linkBehavior
==
CheckFollowSymlink
{
_
,
err
=
os
.
Stat
(
filename
)
}
else
if
linkBehavior
==
CheckSymlinkOnly
{
_
,
err
=
os
.
Lstat
(
filename
)
}
else
{
return
false
,
ErrInvalidLinkTreatment
}
}
return
true
,
nil
}
// FileOrSymlinkExists checks if specified file or symlink exists.
if
os
.
IsNotExist
(
err
)
{
func
FileOrSymlinkExists
(
filename
string
)
(
bool
,
error
)
{
if
_
,
err
:=
os
.
Lstat
(
filename
);
os
.
IsNotExist
(
err
)
{
return
false
,
nil
return
false
,
nil
}
else
if
err
!=
nil
{
}
else
if
err
!=
nil
{
return
false
,
err
return
false
,
err
...
...
Write
Preview
Markdown
is supported
0%
Try again
or
attach a new file
Attach a file
Cancel
You are about to add
0
people
to the discussion. Proceed with caution.
Finish editing this message first!
Cancel
Please
register
or
sign in
to comment