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
257ae4da
Commit
257ae4da
authored
Jan 29, 2019
by
danielqsj
Browse files
Options
Browse Files
Download
Email Patches
Plain Diff
Update vendor/k8s.io/utils
parent
65356896
Expand all
Hide whitespace changes
Inline
Side-by-side
Showing
31 changed files
with
407 additions
and
194 deletions
+407
-194
Godeps.json
Godeps/Godeps.json
+17
-9
LICENSES
Godeps/LICENSES
+0
-0
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
+2
-0
BUILD
vendor/k8s.io/utils/keymutex/BUILD
+26
-0
hashed.go
vendor/k8s.io/utils/keymutex/hashed.go
+58
-0
keymutex.go
vendor/k8s.io/utils/keymutex/keymutex.go
+27
-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/strings/BUILD
+27
-0
escape.go
vendor/k8s.io/utils/strings/escape.go
+36
-0
line_delimiter.go
vendor/k8s.io/utils/strings/line_delimiter.go
+64
-0
strings.go
vendor/k8s.io/utils/strings/strings.go
+46
-0
No files found.
Godeps/Godeps.json
View file @
257ae4da
...
@@ -4090,39 +4090,47 @@
...
@@ -4090,39 +4090,47 @@
},
},
{
{
"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/keymutex"
,
"Rev"
:
"ed37f7428a91fc2a81070808937195dcd46d320e"
},
},
{
{
"ImportPath"
:
"k8s.io/utils/nsenter"
,
"ImportPath"
:
"k8s.io/utils/nsenter"
,
"Rev"
:
"
8a87304934321b4b0ad72a7cb3cbc715d67d38c7
"
"Rev"
:
"
ed37f7428a91fc2a81070808937195dcd46d320e
"
},
},
{
{
"ImportPath"
:
"k8s.io/utils/pointer"
,
"ImportPath"
:
"k8s.io/utils/pointer"
,
"Rev"
:
"8a87304934321b4b0ad72a7cb3cbc715d67d38c7"
"Rev"
:
"ed37f7428a91fc2a81070808937195dcd46d320e"
},
{
"ImportPath"
:
"k8s.io/utils/strings"
,
"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 @
257ae4da
This diff is collapsed.
Click to expand it.
staging/src/k8s.io/apiextensions-apiserver/Godeps/Godeps.json
View file @
257ae4da
...
@@ -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 @
257ae4da
...
@@ -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 @
257ae4da
...
@@ -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 @
257ae4da
...
@@ -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 @
257ae4da
...
@@ -952,15 +952,15 @@
...
@@ -952,15 +952,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 @
257ae4da
...
@@ -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 @
257ae4da
...
@@ -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 @
257ae4da
...
@@ -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 @
257ae4da
...
@@ -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 @
257ae4da
...
@@ -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 @
257ae4da
...
@@ -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 @
257ae4da
...
@@ -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 @
257ae4da
...
@@ -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 @
257ae4da
...
@@ -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 @
257ae4da
...
@@ -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 @
257ae4da
...
@@ -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 @
257ae4da
...
@@ -472,8 +472,10 @@ filegroup(
...
@@ -472,8 +472,10 @@ filegroup(
"//vendor/k8s.io/utils/exec:all-srcs",
"//vendor/k8s.io/utils/exec:all-srcs",
"//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/keymutex:all-srcs",
"//vendor/k8s.io/utils/nsenter:all-srcs",
"//vendor/k8s.io/utils/nsenter:all-srcs",
"//vendor/k8s.io/utils/pointer:all-srcs",
"//vendor/k8s.io/utils/pointer:all-srcs",
"//vendor/k8s.io/utils/strings: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/vbom.ml/util/sortorder:all-srcs",
"//vendor/vbom.ml/util/sortorder:all-srcs",
...
...
vendor/k8s.io/utils/keymutex/BUILD
0 → 100644
View file @
257ae4da
load("@io_bazel_rules_go//go:def.bzl", "go_library")
go_library(
name = "go_default_library",
srcs = [
"hashed.go",
"keymutex.go",
],
importmap = "k8s.io/kubernetes/vendor/k8s.io/utils/keymutex",
importpath = "k8s.io/utils/keymutex",
visibility = ["//visibility:public"],
)
filegroup(
name = "package-srcs",
srcs = glob(["**"]),
tags = ["automanaged"],
visibility = ["//visibility:private"],
)
filegroup(
name = "all-srcs",
srcs = [":package-srcs"],
tags = ["automanaged"],
visibility = ["//visibility:public"],
)
vendor/k8s.io/utils/keymutex/hashed.go
0 → 100644
View file @
257ae4da
/*
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
keymutex
import
(
"hash/fnv"
"runtime"
"sync"
)
// NewHashed returns a new instance of KeyMutex which hashes arbitrary keys to
// a fixed set of locks. `n` specifies number of locks, if n <= 0, we use
// number of cpus.
// Note that because it uses fixed set of locks, different keys may share same
// lock, so it's possible to wait on same lock.
func
NewHashed
(
n
int
)
KeyMutex
{
if
n
<=
0
{
n
=
runtime
.
NumCPU
()
}
return
&
hashedKeyMutex
{
mutexes
:
make
([]
sync
.
Mutex
,
n
),
}
}
type
hashedKeyMutex
struct
{
mutexes
[]
sync
.
Mutex
}
// Acquires a lock associated with the specified ID.
func
(
km
*
hashedKeyMutex
)
LockKey
(
id
string
)
{
km
.
mutexes
[
km
.
hash
(
id
)
%
len
(
km
.
mutexes
)]
.
Lock
()
}
// Releases the lock associated with the specified ID.
func
(
km
*
hashedKeyMutex
)
UnlockKey
(
id
string
)
error
{
km
.
mutexes
[
km
.
hash
(
id
)
%
len
(
km
.
mutexes
)]
.
Unlock
()
return
nil
}
func
(
km
*
hashedKeyMutex
)
hash
(
id
string
)
int
{
h
:=
fnv
.
New32a
()
h
.
Write
([]
byte
(
id
))
return
int
(
h
.
Sum32
())
}
vendor/k8s.io/utils/keymutex/keymutex.go
0 → 100644
View file @
257ae4da
/*
Copyright 2015 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
keymutex
// KeyMutex is a thread-safe interface for acquiring locks on arbitrary strings.
type
KeyMutex
interface
{
// Acquires a lock associated with the specified ID, creates the lock if one doesn't already exist.
LockKey
(
id
string
)
// Releases the lock associated with the specified ID.
// Returns an error if the specified ID doesn't exist.
UnlockKey
(
id
string
)
error
}
vendor/k8s.io/utils/nsenter/BUILD
View file @
257ae4da
...
@@ -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 @
65356896
// +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 @
65356896
// +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 @
257ae4da
...
@@ -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 @
257ae4da
...
@@ -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
{}
vendor/k8s.io/utils/strings/BUILD
0 → 100644
View file @
257ae4da
load("@io_bazel_rules_go//go:def.bzl", "go_library")
go_library(
name = "go_default_library",
srcs = [
"escape.go",
"line_delimiter.go",
"strings.go",
],
importmap = "k8s.io/kubernetes/vendor/k8s.io/utils/strings",
importpath = "k8s.io/utils/strings",
visibility = ["//visibility:public"],
)
filegroup(
name = "package-srcs",
srcs = glob(["**"]),
tags = ["automanaged"],
visibility = ["//visibility:private"],
)
filegroup(
name = "all-srcs",
srcs = [":package-srcs"],
tags = ["automanaged"],
visibility = ["//visibility:public"],
)
vendor/k8s.io/utils/strings/escape.go
0 → 100644
View file @
257ae4da
/*
Copyright 2014 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
strings
import
(
"strings"
)
// EscapeQualifiedName converts a plugin name, which might contain a / into a
// string that is safe to use on-disk. This assumes that the input has already
// been validates as a qualified name. we use "~" rather than ":" here in case
// we ever use a filesystem that doesn't allow ":".
func
EscapeQualifiedName
(
in
string
)
string
{
return
strings
.
Replace
(
in
,
"/"
,
"~"
,
-
1
)
}
// UnescapeQualifiedName converts an escaped plugin name (as per EscapeQualifiedName)
// back to its normal form. This assumes that the input has already been
// validates as a qualified name.
func
UnescapeQualifiedName
(
in
string
)
string
{
return
strings
.
Replace
(
in
,
"~"
,
"/"
,
-
1
)
}
vendor/k8s.io/utils/strings/line_delimiter.go
0 → 100644
View file @
257ae4da
/*
Copyright 2015 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
strings
import
(
"bytes"
"io"
"strings"
)
// LineDelimiter is a filter that will split input on lines
// and bracket each line with the delimiter string.
type
LineDelimiter
struct
{
output
io
.
Writer
delimiter
[]
byte
buf
bytes
.
Buffer
}
// NewLineDelimiter allocates a new io.Writer that will split input on lines
// and bracket each line with the delimiter string. This can be useful in
// output tests where it is difficult to see and test trailing whitespace.
func
NewLineDelimiter
(
output
io
.
Writer
,
delimiter
string
)
*
LineDelimiter
{
return
&
LineDelimiter
{
output
:
output
,
delimiter
:
[]
byte
(
delimiter
)}
}
// Write writes buf to the LineDelimiter ld. The only errors returned are ones
// encountered while writing to the underlying output stream.
func
(
ld
*
LineDelimiter
)
Write
(
buf
[]
byte
)
(
n
int
,
err
error
)
{
return
ld
.
buf
.
Write
(
buf
)
}
// Flush all lines up until now. This will assume insert a linebreak at the current point of the stream.
func
(
ld
*
LineDelimiter
)
Flush
()
(
err
error
)
{
lines
:=
strings
.
Split
(
ld
.
buf
.
String
(),
"
\n
"
)
for
_
,
line
:=
range
lines
{
if
_
,
err
=
ld
.
output
.
Write
(
ld
.
delimiter
);
err
!=
nil
{
return
}
if
_
,
err
=
ld
.
output
.
Write
([]
byte
(
line
));
err
!=
nil
{
return
}
if
_
,
err
=
ld
.
output
.
Write
(
ld
.
delimiter
);
err
!=
nil
{
return
}
if
_
,
err
=
ld
.
output
.
Write
([]
byte
(
"
\n
"
));
err
!=
nil
{
return
}
}
return
}
vendor/k8s.io/utils/strings/strings.go
0 → 100644
View file @
257ae4da
/*
Copyright 2014 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
strings
import
(
"path"
"strings"
)
// SplitQualifiedName Splits a fully qualified name and returns its namespace and name.
// Assumes that the input 'str' has been validated.
func
SplitQualifiedName
(
str
string
)
(
string
,
string
)
{
parts
:=
strings
.
Split
(
str
,
"/"
)
if
len
(
parts
)
<
2
{
return
""
,
str
}
return
parts
[
0
],
parts
[
1
]
}
// JoinQualifiedName joins 'namespace' and 'name' and returns a fully qualified name
// Assumes that the input is valid.
func
JoinQualifiedName
(
namespace
,
name
string
)
string
{
return
path
.
Join
(
namespace
,
name
)
}
// ShortenString returns the first N slice of a string.
func
ShortenString
(
str
string
,
n
int
)
string
{
if
len
(
str
)
<=
n
{
return
str
}
return
str
[
:
n
]
}
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