mirror of
https://git.vectorsigma.ru/public/k3s.git
synced 2026-07-29 01:59:25 +00:00
[engine-1.21] Bump Kubernetes to v1.21.7-k3s1 (#4533)
* Update to v1.21.7 Signed-off-by: Chris Kim <oats87g@gmail.com>
This commit is contained in:
76
go.mod
76
go.mod
@@ -36,36 +36,36 @@ replace (
|
||||
google.golang.org/genproto => google.golang.org/genproto v0.0.0-20200513103714-09dca8ec2884
|
||||
google.golang.org/grpc => google.golang.org/grpc v1.27.1
|
||||
gopkg.in/square/go-jose.v2 => gopkg.in/square/go-jose.v2 v2.2.2
|
||||
k8s.io/api => github.com/k3s-io/kubernetes/staging/src/k8s.io/api v1.21.6-k3s1
|
||||
k8s.io/apiextensions-apiserver => github.com/k3s-io/kubernetes/staging/src/k8s.io/apiextensions-apiserver v1.21.6-k3s1
|
||||
k8s.io/apimachinery => github.com/k3s-io/kubernetes/staging/src/k8s.io/apimachinery v1.21.6-k3s1
|
||||
k8s.io/apiserver => github.com/k3s-io/kubernetes/staging/src/k8s.io/apiserver v1.21.6-k3s1
|
||||
k8s.io/cli-runtime => github.com/k3s-io/kubernetes/staging/src/k8s.io/cli-runtime v1.21.6-k3s1
|
||||
k8s.io/client-go => github.com/k3s-io/kubernetes/staging/src/k8s.io/client-go v1.21.6-k3s1
|
||||
k8s.io/cloud-provider => github.com/k3s-io/kubernetes/staging/src/k8s.io/cloud-provider v1.21.6-k3s1
|
||||
k8s.io/cluster-bootstrap => github.com/k3s-io/kubernetes/staging/src/k8s.io/cluster-bootstrap v1.21.6-k3s1
|
||||
k8s.io/code-generator => github.com/k3s-io/kubernetes/staging/src/k8s.io/code-generator v1.21.6-k3s1
|
||||
k8s.io/component-base => github.com/k3s-io/kubernetes/staging/src/k8s.io/component-base v1.21.6-k3s1
|
||||
k8s.io/component-helpers => github.com/k3s-io/kubernetes/staging/src/k8s.io/component-helpers v1.21.6-k3s1
|
||||
k8s.io/controller-manager => github.com/k3s-io/kubernetes/staging/src/k8s.io/controller-manager v1.21.6-k3s1
|
||||
k8s.io/cri-api => github.com/k3s-io/kubernetes/staging/src/k8s.io/cri-api v1.21.6-k3s1
|
||||
k8s.io/csi-translation-lib => github.com/k3s-io/kubernetes/staging/src/k8s.io/csi-translation-lib v1.21.6-k3s1
|
||||
k8s.io/api => github.com/k3s-io/kubernetes/staging/src/k8s.io/api v1.21.7-k3s1
|
||||
k8s.io/apiextensions-apiserver => github.com/k3s-io/kubernetes/staging/src/k8s.io/apiextensions-apiserver v1.21.7-k3s1
|
||||
k8s.io/apimachinery => github.com/k3s-io/kubernetes/staging/src/k8s.io/apimachinery v1.21.7-k3s1
|
||||
k8s.io/apiserver => github.com/k3s-io/kubernetes/staging/src/k8s.io/apiserver v1.21.7-k3s1
|
||||
k8s.io/cli-runtime => github.com/k3s-io/kubernetes/staging/src/k8s.io/cli-runtime v1.21.7-k3s1
|
||||
k8s.io/client-go => github.com/k3s-io/kubernetes/staging/src/k8s.io/client-go v1.21.7-k3s1
|
||||
k8s.io/cloud-provider => github.com/k3s-io/kubernetes/staging/src/k8s.io/cloud-provider v1.21.7-k3s1
|
||||
k8s.io/cluster-bootstrap => github.com/k3s-io/kubernetes/staging/src/k8s.io/cluster-bootstrap v1.21.7-k3s1
|
||||
k8s.io/code-generator => github.com/k3s-io/kubernetes/staging/src/k8s.io/code-generator v1.21.7-k3s1
|
||||
k8s.io/component-base => github.com/k3s-io/kubernetes/staging/src/k8s.io/component-base v1.21.7-k3s1
|
||||
k8s.io/component-helpers => github.com/k3s-io/kubernetes/staging/src/k8s.io/component-helpers v1.21.7-k3s1
|
||||
k8s.io/controller-manager => github.com/k3s-io/kubernetes/staging/src/k8s.io/controller-manager v1.21.7-k3s1
|
||||
k8s.io/cri-api => github.com/k3s-io/kubernetes/staging/src/k8s.io/cri-api v1.21.7-k3s1
|
||||
k8s.io/csi-translation-lib => github.com/k3s-io/kubernetes/staging/src/k8s.io/csi-translation-lib v1.21.7-k3s1
|
||||
k8s.io/klog => github.com/k3s-io/klog v1.0.0-k3s2 // k3s-release-1.x
|
||||
k8s.io/klog/v2 => github.com/k3s-io/klog/v2 v2.9.0-k3s2 // k3s-main
|
||||
k8s.io/kube-aggregator => github.com/k3s-io/kubernetes/staging/src/k8s.io/kube-aggregator v1.21.6-k3s1
|
||||
k8s.io/kube-controller-manager => github.com/k3s-io/kubernetes/staging/src/k8s.io/kube-controller-manager v1.21.6-k3s1
|
||||
k8s.io/kube-proxy => github.com/k3s-io/kubernetes/staging/src/k8s.io/kube-proxy v1.21.6-k3s1
|
||||
k8s.io/kube-scheduler => github.com/k3s-io/kubernetes/staging/src/k8s.io/kube-scheduler v1.21.6-k3s1
|
||||
k8s.io/kubectl => github.com/k3s-io/kubernetes/staging/src/k8s.io/kubectl v1.21.6-k3s1
|
||||
k8s.io/kubelet => github.com/k3s-io/kubernetes/staging/src/k8s.io/kubelet v1.21.6-k3s1
|
||||
k8s.io/kubernetes => github.com/k3s-io/kubernetes v1.21.6-k3s1
|
||||
k8s.io/legacy-cloud-providers => github.com/k3s-io/kubernetes/staging/src/k8s.io/legacy-cloud-providers v1.21.6-k3s1
|
||||
k8s.io/metrics => github.com/k3s-io/kubernetes/staging/src/k8s.io/metrics v1.21.6-k3s1
|
||||
k8s.io/mount-utils => github.com/k3s-io/kubernetes/staging/src/k8s.io/mount-utils v1.21.6-k3s1
|
||||
k8s.io/node-api => github.com/k3s-io/kubernetes/staging/src/k8s.io/node-api v1.21.6-k3s1
|
||||
k8s.io/sample-apiserver => github.com/k3s-io/kubernetes/staging/src/k8s.io/sample-apiserver v1.21.6-k3s1
|
||||
k8s.io/sample-cli-plugin => github.com/k3s-io/kubernetes/staging/src/k8s.io/sample-cli-plugin v1.21.6-k3s1
|
||||
k8s.io/sample-controller => github.com/k3s-io/kubernetes/staging/src/k8s.io/sample-controller v1.21.6-k3s1
|
||||
k8s.io/kube-aggregator => github.com/k3s-io/kubernetes/staging/src/k8s.io/kube-aggregator v1.21.7-k3s1
|
||||
k8s.io/kube-controller-manager => github.com/k3s-io/kubernetes/staging/src/k8s.io/kube-controller-manager v1.21.7-k3s1
|
||||
k8s.io/kube-proxy => github.com/k3s-io/kubernetes/staging/src/k8s.io/kube-proxy v1.21.7-k3s1
|
||||
k8s.io/kube-scheduler => github.com/k3s-io/kubernetes/staging/src/k8s.io/kube-scheduler v1.21.7-k3s1
|
||||
k8s.io/kubectl => github.com/k3s-io/kubernetes/staging/src/k8s.io/kubectl v1.21.7-k3s1
|
||||
k8s.io/kubelet => github.com/k3s-io/kubernetes/staging/src/k8s.io/kubelet v1.21.7-k3s1
|
||||
k8s.io/kubernetes => github.com/k3s-io/kubernetes v1.21.7-k3s1
|
||||
k8s.io/legacy-cloud-providers => github.com/k3s-io/kubernetes/staging/src/k8s.io/legacy-cloud-providers v1.21.7-k3s1
|
||||
k8s.io/metrics => github.com/k3s-io/kubernetes/staging/src/k8s.io/metrics v1.21.7-k3s1
|
||||
k8s.io/mount-utils => github.com/k3s-io/kubernetes/staging/src/k8s.io/mount-utils v1.21.7-k3s1
|
||||
k8s.io/node-api => github.com/k3s-io/kubernetes/staging/src/k8s.io/node-api v1.21.7-k3s1
|
||||
k8s.io/sample-apiserver => github.com/k3s-io/kubernetes/staging/src/k8s.io/sample-apiserver v1.21.7-k3s1
|
||||
k8s.io/sample-cli-plugin => github.com/k3s-io/kubernetes/staging/src/k8s.io/sample-cli-plugin v1.21.7-k3s1
|
||||
k8s.io/sample-controller => github.com/k3s-io/kubernetes/staging/src/k8s.io/sample-controller v1.21.7-k3s1
|
||||
mvdan.cc/unparam => mvdan.cc/unparam v0.0.0-20210104141923-aac4ce9116a7
|
||||
)
|
||||
|
||||
@@ -140,18 +140,18 @@ require (
|
||||
google.golang.org/grpc v1.38.0
|
||||
gopkg.in/yaml.v2 v2.4.0
|
||||
inet.af/tcpproxy v0.0.0-20200125044825-b6bb9b5b8252
|
||||
k8s.io/api v0.21.6
|
||||
k8s.io/apimachinery v0.21.6
|
||||
k8s.io/apiserver v0.21.6
|
||||
k8s.io/api v0.21.7
|
||||
k8s.io/apimachinery v0.21.7
|
||||
k8s.io/apiserver v0.21.7
|
||||
k8s.io/client-go v11.0.1-0.20190409021438-1a26190bd76a+incompatible
|
||||
k8s.io/cloud-provider v0.21.6
|
||||
k8s.io/component-base v0.21.6
|
||||
k8s.io/controller-manager v0.21.6 // indirect
|
||||
k8s.io/cri-api v0.21.6
|
||||
k8s.io/cloud-provider v0.21.7
|
||||
k8s.io/component-base v0.21.7
|
||||
k8s.io/controller-manager v0.21.7 // indirect
|
||||
k8s.io/cri-api v0.21.7
|
||||
k8s.io/klog v1.0.0
|
||||
k8s.io/klog/v2 v2.9.0
|
||||
k8s.io/kubectl v0.21.6
|
||||
k8s.io/kubernetes v1.21.6
|
||||
k8s.io/utils v0.0.0-20201110183641-67b214c5f920
|
||||
k8s.io/kubectl v0.21.7
|
||||
k8s.io/kubernetes v1.21.7
|
||||
k8s.io/utils v0.0.0-20210521133846-da695404a2bc
|
||||
sigs.k8s.io/yaml v1.2.0
|
||||
)
|
||||
|
||||
105
go.sum
105
go.sum
@@ -556,55 +556,55 @@ github.com/k3s-io/klog v1.0.0-k3s2 h1:yyvD2bQbxG7m85/pvNctLX2bUDmva5kOBvuZ77tTGB
|
||||
github.com/k3s-io/klog v1.0.0-k3s2/go.mod h1:4Bi6QPql/J/LkTDqv7R/cd3hPo4k2DG6Ptcz060Ez5I=
|
||||
github.com/k3s-io/klog/v2 v2.9.0-k3s2 h1:8Dzu3wGPFMo1mPEobSEpkHWH+HXqgFXp8R7FbcdgE8k=
|
||||
github.com/k3s-io/klog/v2 v2.9.0-k3s2/go.mod h1:hy9LJ/NvuK+iVyP4Ehqva4HxZG/oXyIS3n3Jmire4Ec=
|
||||
github.com/k3s-io/kubernetes v1.21.6-k3s1 h1:HsiQ/OtXP0H72QkQJu5AqL6lohRDzx4VuEVtkSErvRs=
|
||||
github.com/k3s-io/kubernetes v1.21.6-k3s1/go.mod h1:fhjjdD6kyZTCtggL22q32PwAzTyE5kv7CbzSYa5r/cQ=
|
||||
github.com/k3s-io/kubernetes/staging/src/k8s.io/api v1.21.6-k3s1 h1:GVn1gZtWdB7psjWKG8Tcq4UiI3YInZd6S/AyT8gYOVk=
|
||||
github.com/k3s-io/kubernetes/staging/src/k8s.io/api v1.21.6-k3s1/go.mod h1:DKjoC7WTLvupppdmb5jEvRDPQENLZqz/stEUs19TOOc=
|
||||
github.com/k3s-io/kubernetes/staging/src/k8s.io/apiextensions-apiserver v1.21.6-k3s1 h1:GCmOFqi0mChxJIb3DAsMgAOuD/mtkfvpZl9/mUxRC5c=
|
||||
github.com/k3s-io/kubernetes/staging/src/k8s.io/apiextensions-apiserver v1.21.6-k3s1/go.mod h1:0HR5OXMBK/8392fH2uwiut1bAviooqS8Gq4l8DmcPdk=
|
||||
github.com/k3s-io/kubernetes/staging/src/k8s.io/apimachinery v1.21.6-k3s1 h1:Zhr3X9wgVBKoRGJ1jhkQhjaJ2ss5AliYCTws9slzJ/Y=
|
||||
github.com/k3s-io/kubernetes/staging/src/k8s.io/apimachinery v1.21.6-k3s1/go.mod h1:PqG0iRzU38rKZ1iWT35AxpoiAMISUuEzxSCs3MT8rh0=
|
||||
github.com/k3s-io/kubernetes/staging/src/k8s.io/apiserver v1.21.6-k3s1 h1:/X7k88EdYQS3YAj2niQJQ6X92dS46l/8LY21Vi6To1g=
|
||||
github.com/k3s-io/kubernetes/staging/src/k8s.io/apiserver v1.21.6-k3s1/go.mod h1:k+VUSwIsUmY4IFy3tdbVy9LmGOB3hcr7UzanjBlGXag=
|
||||
github.com/k3s-io/kubernetes/staging/src/k8s.io/cli-runtime v1.21.6-k3s1 h1:S6K26hgocKREwM/4k70JUi6OJb/AUzIEvflIj+Ox7wQ=
|
||||
github.com/k3s-io/kubernetes/staging/src/k8s.io/cli-runtime v1.21.6-k3s1/go.mod h1:QSZneoGpGHCXzmtQxaGWwjhUG5o7Pm4p3hXFJGdIqTg=
|
||||
github.com/k3s-io/kubernetes/staging/src/k8s.io/client-go v1.21.6-k3s1 h1:qdVS9nxSdk2pe9eyiKzoMQIKnlgfmoOY0zS8b9QN7/Y=
|
||||
github.com/k3s-io/kubernetes/staging/src/k8s.io/client-go v1.21.6-k3s1/go.mod h1:y2aIW+cP8G8VfUte3u3MiQ3L/PERQqRGygDRcDN5T1o=
|
||||
github.com/k3s-io/kubernetes/staging/src/k8s.io/cloud-provider v1.21.6-k3s1 h1:1kZPmgYFBVr388lO4cFhreVNm0ytOT6DtNUF43BmJFM=
|
||||
github.com/k3s-io/kubernetes/staging/src/k8s.io/cloud-provider v1.21.6-k3s1/go.mod h1:jnyFNYjLh6zDVDX8lPJoM0ROFnElSukoYofP69gatTY=
|
||||
github.com/k3s-io/kubernetes/staging/src/k8s.io/cluster-bootstrap v1.21.6-k3s1 h1:ZkCSjDoX8e9Gz6C5N/vQhG+uQA4PG+CXeU79CaKAK9k=
|
||||
github.com/k3s-io/kubernetes/staging/src/k8s.io/cluster-bootstrap v1.21.6-k3s1/go.mod h1:GesL7UUjYCAvxEJANbK4ou9nteXGxMZeI7IBuW+LO0k=
|
||||
github.com/k3s-io/kubernetes/staging/src/k8s.io/code-generator v1.21.6-k3s1 h1:vEOZCbKktnkQxmSTVvX1aW9B0oAYdP8xJWgfZek1Ai0=
|
||||
github.com/k3s-io/kubernetes/staging/src/k8s.io/code-generator v1.21.6-k3s1/go.mod h1:OmGWNrMJ55atJlvsSEBey/8y/yZb6V5SfZ31tx2dXH4=
|
||||
github.com/k3s-io/kubernetes/staging/src/k8s.io/component-base v1.21.6-k3s1 h1:J/0cxc4y7AMrHvAWBPyb+1ZIBWY4AGMtXw7abLDKBFk=
|
||||
github.com/k3s-io/kubernetes/staging/src/k8s.io/component-base v1.21.6-k3s1/go.mod h1:L0Jb24aSdhNNo8/7xn37p2gYNQJp6u+hSNRdBI/+8ZA=
|
||||
github.com/k3s-io/kubernetes/staging/src/k8s.io/component-helpers v1.21.6-k3s1 h1:pjYjAe8lF7hOCSCth9NYlqbirC8tew0QcGhKmIq0ng0=
|
||||
github.com/k3s-io/kubernetes/staging/src/k8s.io/component-helpers v1.21.6-k3s1/go.mod h1:4EyOROwpTr3dSoIV3Uyi971zUBRAAnWqaLtHwWd8A90=
|
||||
github.com/k3s-io/kubernetes/staging/src/k8s.io/controller-manager v1.21.6-k3s1 h1:NhC3hZze/QnYK9AQAYF4X+9Qc+OY2AOW1bN5CylZvQ0=
|
||||
github.com/k3s-io/kubernetes/staging/src/k8s.io/controller-manager v1.21.6-k3s1/go.mod h1:0TTu5j8ujROYaYr3gNVhUDJj1OblJw8b/bjg5dRWumU=
|
||||
github.com/k3s-io/kubernetes/staging/src/k8s.io/cri-api v1.21.6-k3s1 h1:3DsQu35y6YWflkhQkf5P9sskkc7XH7xNlL31NsWaKSY=
|
||||
github.com/k3s-io/kubernetes/staging/src/k8s.io/cri-api v1.21.6-k3s1/go.mod h1:AtNyV6bU8OshuUzl3fdp7IoK3Xmwyfa1CKXxIKKI1V4=
|
||||
github.com/k3s-io/kubernetes/staging/src/k8s.io/csi-translation-lib v1.21.6-k3s1 h1:QJfJcckEYgpS2eFBnb3ylyKDPpThuEbHkF8XKR3LM1s=
|
||||
github.com/k3s-io/kubernetes/staging/src/k8s.io/csi-translation-lib v1.21.6-k3s1/go.mod h1:mS+uRrOptcYqC6ePTYfP0/5qbIKjFUFY6NwgffdzhDI=
|
||||
github.com/k3s-io/kubernetes/staging/src/k8s.io/kube-aggregator v1.21.6-k3s1 h1:VkLMuUXF4R6m2wMVbxL4TR5YXmtVnL4NP9A8SvcdDyM=
|
||||
github.com/k3s-io/kubernetes/staging/src/k8s.io/kube-aggregator v1.21.6-k3s1/go.mod h1:QOxvp5HtilAGgSIIEeQJ6kzgxwLwGh/ZezXpIC5y8xU=
|
||||
github.com/k3s-io/kubernetes/staging/src/k8s.io/kube-controller-manager v1.21.6-k3s1 h1:8QP4mj3Nsq5PiNhSLhIOq97r8zwFztOXynp7sI/s2F8=
|
||||
github.com/k3s-io/kubernetes/staging/src/k8s.io/kube-controller-manager v1.21.6-k3s1/go.mod h1:46iKO45TZat/zvPyqe8TjLLrTS/U/nGB92Ft63PEPF0=
|
||||
github.com/k3s-io/kubernetes/staging/src/k8s.io/kube-proxy v1.21.6-k3s1 h1:b9/7kUy4OjLVnNfoGZj93lRPHwqZpPAgN16mxbEqwI4=
|
||||
github.com/k3s-io/kubernetes/staging/src/k8s.io/kube-proxy v1.21.6-k3s1/go.mod h1:6mEp02ABsuOeeBuUrrol78v9LYysX7Z8CZOMFlkPOOI=
|
||||
github.com/k3s-io/kubernetes/staging/src/k8s.io/kube-scheduler v1.21.6-k3s1 h1:b6qC7ljPR4na4466OM/XV2bXvl1dg4aNy+YPZHvRicU=
|
||||
github.com/k3s-io/kubernetes/staging/src/k8s.io/kube-scheduler v1.21.6-k3s1/go.mod h1:xZnfOrGTta6rB9IWNKl82yzWKpMSUXVmyGHRilQ9kzM=
|
||||
github.com/k3s-io/kubernetes/staging/src/k8s.io/kubectl v1.21.6-k3s1 h1:QXz7daJCRJynCYR3il0IjI6bJ8UtQcZJoEK89XaGdAU=
|
||||
github.com/k3s-io/kubernetes/staging/src/k8s.io/kubectl v1.21.6-k3s1/go.mod h1:Ksrw4vdv7AcyWcNGKiGPotnRrUE+Ylh0FuzXq/pG0gc=
|
||||
github.com/k3s-io/kubernetes/staging/src/k8s.io/kubelet v1.21.6-k3s1 h1:SURH+F2o9oswIOG8ZWHXlUQcq19cji4hVOvduxvOZpk=
|
||||
github.com/k3s-io/kubernetes/staging/src/k8s.io/kubelet v1.21.6-k3s1/go.mod h1:o8/6oYd5NojfXqZcgzwRY6/N9H0txmvDbs4Sk6Laz0A=
|
||||
github.com/k3s-io/kubernetes/staging/src/k8s.io/legacy-cloud-providers v1.21.6-k3s1 h1:QlW15p2B1qPH3xGalrISTo27+VUYocuoC6aXJ4/+zR4=
|
||||
github.com/k3s-io/kubernetes/staging/src/k8s.io/legacy-cloud-providers v1.21.6-k3s1/go.mod h1:/Dg7uX8zXtkXFOKWmNMByBfKKHlw2BvXZ6b/TgnN7+Q=
|
||||
github.com/k3s-io/kubernetes/staging/src/k8s.io/metrics v1.21.6-k3s1 h1:LR6w8QU4yaxwyPLk/zZsRzyqxpmTLrXDGPG4OxJ8fr0=
|
||||
github.com/k3s-io/kubernetes/staging/src/k8s.io/metrics v1.21.6-k3s1/go.mod h1:/SknInvlq+Fm+vrO/Z7JYHjxwIsxAl32mAI9tUH/lGY=
|
||||
github.com/k3s-io/kubernetes/staging/src/k8s.io/mount-utils v1.21.6-k3s1 h1:Yo7UntbRMG9JCWQDrpHUbvyLxZ81SYBu6j/6dLQS5ms=
|
||||
github.com/k3s-io/kubernetes/staging/src/k8s.io/mount-utils v1.21.6-k3s1/go.mod h1:Ta+up70W/DYR4krb0PCKZMrrALZVs7FRaRMWGh0OeUQ=
|
||||
github.com/k3s-io/kubernetes/staging/src/k8s.io/sample-apiserver v1.21.6-k3s1/go.mod h1:zlsrh6rIF8B7aGFyjGXq379Gp6b6oh9U6h7BwQxNI0E=
|
||||
github.com/k3s-io/kubernetes v1.21.7-k3s1 h1:4R3JRHQOAezgeltlyr6WjEoIxppPG7vukIYAaCBTkgg=
|
||||
github.com/k3s-io/kubernetes v1.21.7-k3s1/go.mod h1:nzUaknQ5aPK+iI6oUQkFqybxmB5i/SsfuBHDWFL7AW0=
|
||||
github.com/k3s-io/kubernetes/staging/src/k8s.io/api v1.21.7-k3s1 h1:O721bAFVn64FZoI7vkugekoZ1doWz93JL6qiPTzz2v4=
|
||||
github.com/k3s-io/kubernetes/staging/src/k8s.io/api v1.21.7-k3s1/go.mod h1:DKjoC7WTLvupppdmb5jEvRDPQENLZqz/stEUs19TOOc=
|
||||
github.com/k3s-io/kubernetes/staging/src/k8s.io/apiextensions-apiserver v1.21.7-k3s1 h1:Ch5re7a2+d1K1k519yJz8WWU1WIqhbNSJupzKZZP3f4=
|
||||
github.com/k3s-io/kubernetes/staging/src/k8s.io/apiextensions-apiserver v1.21.7-k3s1/go.mod h1:F2W0VMpGMHAuroMmJkY+/D6cc2TrytkL2DmNJb+2MLw=
|
||||
github.com/k3s-io/kubernetes/staging/src/k8s.io/apimachinery v1.21.7-k3s1 h1:p5uCLMhzZXF9VJc0LOQnHWh+hwg1jA9JE3PrfaypfZA=
|
||||
github.com/k3s-io/kubernetes/staging/src/k8s.io/apimachinery v1.21.7-k3s1/go.mod h1:MqtsF2aTDe78g2mplyAtjNRYH+CUIpvMRSlv/hoL6ag=
|
||||
github.com/k3s-io/kubernetes/staging/src/k8s.io/apiserver v1.21.7-k3s1 h1:rib93kMausvSbAWq3VrUxp9Kx+fBbVJiNPWoK6Wqc0g=
|
||||
github.com/k3s-io/kubernetes/staging/src/k8s.io/apiserver v1.21.7-k3s1/go.mod h1:86uqe6udXJsFgwWA6VAyq74pGAINigyBoKGzQO+3hVc=
|
||||
github.com/k3s-io/kubernetes/staging/src/k8s.io/cli-runtime v1.21.7-k3s1 h1:jB2sxlj012t4a4RHs9bsWvclM8GnzVBvpDmqh2Sll4M=
|
||||
github.com/k3s-io/kubernetes/staging/src/k8s.io/cli-runtime v1.21.7-k3s1/go.mod h1:6LOylTtK4otLqnWPfNTqDsuv8UBJPc9/TdrBUlzU1/M=
|
||||
github.com/k3s-io/kubernetes/staging/src/k8s.io/client-go v1.21.7-k3s1 h1:IJ10ryooVSc7gIfY56SB5lW9IZSBpt3kHl7eYqy7Hdk=
|
||||
github.com/k3s-io/kubernetes/staging/src/k8s.io/client-go v1.21.7-k3s1/go.mod h1:6kkO77ohZMEs4CVcubn9WDO1uMnU9y2seSH5KUu7I6c=
|
||||
github.com/k3s-io/kubernetes/staging/src/k8s.io/cloud-provider v1.21.7-k3s1 h1:lHJRlPqtcQfKG6vV93J9v6RPczZy+vCXOtL44rmXml4=
|
||||
github.com/k3s-io/kubernetes/staging/src/k8s.io/cloud-provider v1.21.7-k3s1/go.mod h1:0d4syrihIH4bLPaxkVylAcq3RPnmQxy5xKZIZUsLdx4=
|
||||
github.com/k3s-io/kubernetes/staging/src/k8s.io/cluster-bootstrap v1.21.7-k3s1 h1:u1MRZhKwKn9HOCRrdS6NICXb2hDrTRZbCIkVFkC9lA8=
|
||||
github.com/k3s-io/kubernetes/staging/src/k8s.io/cluster-bootstrap v1.21.7-k3s1/go.mod h1:GesL7UUjYCAvxEJANbK4ou9nteXGxMZeI7IBuW+LO0k=
|
||||
github.com/k3s-io/kubernetes/staging/src/k8s.io/code-generator v1.21.7-k3s1 h1:l69c+pIURT9n9QjkJXrVag6FhlMh3uTnFo873wmg5XQ=
|
||||
github.com/k3s-io/kubernetes/staging/src/k8s.io/code-generator v1.21.7-k3s1/go.mod h1:8Y64wZxkxQW3qFZmpXBBMTh3Zq5vBcvJ1KNptrf3uXc=
|
||||
github.com/k3s-io/kubernetes/staging/src/k8s.io/component-base v1.21.7-k3s1 h1:7AUYXTb/6gMJWN1IFKTa4BM05ZGFsYTsYuVsmfnQkM4=
|
||||
github.com/k3s-io/kubernetes/staging/src/k8s.io/component-base v1.21.7-k3s1/go.mod h1:NM0e+gVPU7aXP57jZXwrRMCSihjz+ZiPx9vCwibyoxk=
|
||||
github.com/k3s-io/kubernetes/staging/src/k8s.io/component-helpers v1.21.7-k3s1 h1:unyqz1WA8mGUjig7+7JpGkTSV8P+W9iXnygmLExtfQo=
|
||||
github.com/k3s-io/kubernetes/staging/src/k8s.io/component-helpers v1.21.7-k3s1/go.mod h1:hhr21Lfip4vHneWxaSmd20NYbNeN6ev8H08K0yr5Y0U=
|
||||
github.com/k3s-io/kubernetes/staging/src/k8s.io/controller-manager v1.21.7-k3s1 h1:WiAM1Mf1s7QhkJvnPPNdTVJSa0Jzu/DVWLo3yMLnTeo=
|
||||
github.com/k3s-io/kubernetes/staging/src/k8s.io/controller-manager v1.21.7-k3s1/go.mod h1:riEm64eqi9L6ANyj6EoXirRMh+7hziTJJSfs7U6wMiA=
|
||||
github.com/k3s-io/kubernetes/staging/src/k8s.io/cri-api v1.21.7-k3s1 h1:RAq5vJRyuhlLdvQzQbewtFQeW1IGVz61hFCMGneQEnk=
|
||||
github.com/k3s-io/kubernetes/staging/src/k8s.io/cri-api v1.21.7-k3s1/go.mod h1:AtNyV6bU8OshuUzl3fdp7IoK3Xmwyfa1CKXxIKKI1V4=
|
||||
github.com/k3s-io/kubernetes/staging/src/k8s.io/csi-translation-lib v1.21.7-k3s1 h1:eVLknu8kckIsyKCgeXpupDIq9r0jLEa3GT2jzGYmrM8=
|
||||
github.com/k3s-io/kubernetes/staging/src/k8s.io/csi-translation-lib v1.21.7-k3s1/go.mod h1:mS+uRrOptcYqC6ePTYfP0/5qbIKjFUFY6NwgffdzhDI=
|
||||
github.com/k3s-io/kubernetes/staging/src/k8s.io/kube-aggregator v1.21.7-k3s1 h1:qDND+QprsGenUQnQDm1mbv+5EPcwF2lvY64GwGp5QgU=
|
||||
github.com/k3s-io/kubernetes/staging/src/k8s.io/kube-aggregator v1.21.7-k3s1/go.mod h1:D+55+vF+t6fH8cV7oqJSnZGnviHLmoE78kPuU3nZVRE=
|
||||
github.com/k3s-io/kubernetes/staging/src/k8s.io/kube-controller-manager v1.21.7-k3s1 h1:h58IH3neeITkV9kOww/knBNq/rg3S2Oaj5u6oyHUsdg=
|
||||
github.com/k3s-io/kubernetes/staging/src/k8s.io/kube-controller-manager v1.21.7-k3s1/go.mod h1:46iKO45TZat/zvPyqe8TjLLrTS/U/nGB92Ft63PEPF0=
|
||||
github.com/k3s-io/kubernetes/staging/src/k8s.io/kube-proxy v1.21.7-k3s1 h1:CtfastdZ2/y+56MN9HK01JvyhBOef24WEzXt0oy0YJE=
|
||||
github.com/k3s-io/kubernetes/staging/src/k8s.io/kube-proxy v1.21.7-k3s1/go.mod h1:6mEp02ABsuOeeBuUrrol78v9LYysX7Z8CZOMFlkPOOI=
|
||||
github.com/k3s-io/kubernetes/staging/src/k8s.io/kube-scheduler v1.21.7-k3s1 h1:CwwAij0jjSul8DFr/14QhIcQrFTg4aEMToaFVfF518g=
|
||||
github.com/k3s-io/kubernetes/staging/src/k8s.io/kube-scheduler v1.21.7-k3s1/go.mod h1:xZnfOrGTta6rB9IWNKl82yzWKpMSUXVmyGHRilQ9kzM=
|
||||
github.com/k3s-io/kubernetes/staging/src/k8s.io/kubectl v1.21.7-k3s1 h1:MW771VanITaPll9zS5hC+yCxRD6RzDFT9ummIIyyVNk=
|
||||
github.com/k3s-io/kubernetes/staging/src/k8s.io/kubectl v1.21.7-k3s1/go.mod h1:6atiJKMW52yKTr5Py3wF6N3hFF52rb6uReuloneuE18=
|
||||
github.com/k3s-io/kubernetes/staging/src/k8s.io/kubelet v1.21.7-k3s1 h1:0MTTj6yvBDUyZk0gjILtqY6HLO3fEQWk5Dl37AjjhCs=
|
||||
github.com/k3s-io/kubernetes/staging/src/k8s.io/kubelet v1.21.7-k3s1/go.mod h1:o8/6oYd5NojfXqZcgzwRY6/N9H0txmvDbs4Sk6Laz0A=
|
||||
github.com/k3s-io/kubernetes/staging/src/k8s.io/legacy-cloud-providers v1.21.7-k3s1 h1:vuIcsWnDPTHVW/vXfjqouVnwU582rBzx2RvKogTcGNQ=
|
||||
github.com/k3s-io/kubernetes/staging/src/k8s.io/legacy-cloud-providers v1.21.7-k3s1/go.mod h1:VdiQgpHlDmw8TGVe7n8rWpOrNa16CGEdLdHCl6k/E4I=
|
||||
github.com/k3s-io/kubernetes/staging/src/k8s.io/metrics v1.21.7-k3s1 h1:DRVKrxU59AbKAv7QdvMOho55I9tKqPWERLopGtTCt/s=
|
||||
github.com/k3s-io/kubernetes/staging/src/k8s.io/metrics v1.21.7-k3s1/go.mod h1:/SknInvlq+Fm+vrO/Z7JYHjxwIsxAl32mAI9tUH/lGY=
|
||||
github.com/k3s-io/kubernetes/staging/src/k8s.io/mount-utils v1.21.7-k3s1 h1:hZW2YG8/jFmqaGipkrcJ+7vsJzaruV7zSb8h0NCJ0P8=
|
||||
github.com/k3s-io/kubernetes/staging/src/k8s.io/mount-utils v1.21.7-k3s1/go.mod h1:EycBBK7+p/RjTpXnAYKqgD8to0E702DIhluqnkmoFR8=
|
||||
github.com/k3s-io/kubernetes/staging/src/k8s.io/sample-apiserver v1.21.7-k3s1/go.mod h1:paVpDpi6QV+jXw3p0TnwnmNwoZz2Ms8rS7pN2wcsZLc=
|
||||
github.com/k3s-io/protobuf v1.4.3-k3s1 h1:gduXrSm/6KkbTuctP6bASYqKQ/tyC/PNYqxBmJnk4Tc=
|
||||
github.com/k3s-io/protobuf v1.4.3-k3s1/go.mod h1:oDoupMAO8OvCJWAcko0GGGIgR6R6ocIYbsSw735rRwI=
|
||||
github.com/karrick/godirwalk v1.16.1 h1:DynhcF+bztK8gooS0+NDJFrdNZjJ3gzVzC545UNA9iw=
|
||||
@@ -1252,13 +1252,14 @@ k8s.io/gengo v0.0.0-20201214224949-b6c5ce23f027 h1:Uusb3oh8XcdzDF/ndlI4ToKTYVlkC
|
||||
k8s.io/gengo v0.0.0-20201214224949-b6c5ce23f027/go.mod h1:FiNAH4ZV3gBg2Kwh89tzAEV2be7d5xI0vBa/VySYy3E=
|
||||
k8s.io/heapster v1.2.0-beta.1 h1:lUsE/AHOMHpi3MLlBEkaU8Esxm5QhdyCrv1o7ot0s84=
|
||||
k8s.io/heapster v1.2.0-beta.1/go.mod h1:h1uhptVXMwC8xtZBYsPXKVi8fpdlYkTs6k949KozGrM=
|
||||
k8s.io/kube-openapi v0.0.0-20210305001622-591a79e4bda7 h1:vEx13qjvaZ4yfObSSXW7BrMc/KQBBT/Jyee8XtLf4x0=
|
||||
k8s.io/kube-openapi v0.0.0-20210305001622-591a79e4bda7/go.mod h1:wXW5VT87nVfh/iLV8FpR2uDvrFyomxbtb1KivDbvPTE=
|
||||
k8s.io/kube-openapi v0.0.0-20211110012726-3cc51fd1e909 h1:s77MRc/+/eQjsF89MB12JssAlsoi9mnNoaacRqibeAU=
|
||||
k8s.io/kube-openapi v0.0.0-20211110012726-3cc51fd1e909/go.mod h1:wXW5VT87nVfh/iLV8FpR2uDvrFyomxbtb1KivDbvPTE=
|
||||
k8s.io/system-validators v1.4.0/go.mod h1:bPldcLgkIUK22ALflnsXk8pvkTEndYdNuaHH6gRrl0Q=
|
||||
k8s.io/utils v0.0.0-20190801114015-581e00157fb1/go.mod h1:sZAwmy6armz5eXlNoLmJcl4F1QuKu7sr+mFQ0byX7Ew=
|
||||
k8s.io/utils v0.0.0-20191114184206-e782cd3c129f/go.mod h1:sZAwmy6armz5eXlNoLmJcl4F1QuKu7sr+mFQ0byX7Ew=
|
||||
k8s.io/utils v0.0.0-20201110183641-67b214c5f920 h1:CbnUZsM497iRC5QMVkHwyl8s2tB3g7yaSHkYPkpgelw=
|
||||
k8s.io/utils v0.0.0-20201110183641-67b214c5f920/go.mod h1:jPW/WVKK9YHAvNhRxK0md/EJ228hCsBRufyofKtW8HA=
|
||||
k8s.io/utils v0.0.0-20210521133846-da695404a2bc h1:dx6VGe+PnOW/kD/2UV4aUSsRfJGd7+lcqgJ6Xg0HwUs=
|
||||
k8s.io/utils v0.0.0-20210521133846-da695404a2bc/go.mod h1:jPW/WVKK9YHAvNhRxK0md/EJ228hCsBRufyofKtW8HA=
|
||||
modernc.org/cc v1.0.0/go.mod h1:1Sk4//wdnYJiUIxnW8ddKpaOJCF37yAdqYnkxUpaYxw=
|
||||
modernc.org/golex v1.0.0/go.mod h1:b/QX9oBD/LhixY6NDh+IdGv17hgB+51fET1i2kPSmvk=
|
||||
modernc.org/mathutil v1.0.0/go.mod h1:wU0vUrJsVWBZ4P6e7xtFJEhFSNsfRLJ8H458uRjg03k=
|
||||
|
||||
29
vendor/k8s.io/apiserver/pkg/server/httplog/httplog.go
generated
vendored
29
vendor/k8s.io/apiserver/pkg/server/httplog/httplog.go
generated
vendored
@@ -23,6 +23,7 @@ import (
|
||||
"net"
|
||||
"net/http"
|
||||
"runtime"
|
||||
"sync"
|
||||
"time"
|
||||
|
||||
"k8s.io/klog/v2"
|
||||
@@ -51,13 +52,17 @@ type respLogger struct {
|
||||
statusRecorded bool
|
||||
status int
|
||||
statusStack string
|
||||
addedInfo string
|
||||
startTime time.Time
|
||||
// mutex is used when accessing addedInfo
|
||||
// It can be modified by other goroutine when logging happens (in case of request timeout)
|
||||
mutex sync.Mutex
|
||||
addedInfo string
|
||||
startTime time.Time
|
||||
|
||||
captureErrorOutput bool
|
||||
|
||||
req *http.Request
|
||||
w http.ResponseWriter
|
||||
req *http.Request
|
||||
userAgent string
|
||||
w http.ResponseWriter
|
||||
|
||||
logStacktracePred StacktracePred
|
||||
}
|
||||
@@ -107,6 +112,7 @@ func newLogged(req *http.Request, w http.ResponseWriter) *respLogger {
|
||||
return &respLogger{
|
||||
startTime: time.Now(),
|
||||
req: req,
|
||||
userAgent: req.UserAgent(),
|
||||
w: w,
|
||||
logStacktracePred: DefaultStacktracePred,
|
||||
}
|
||||
@@ -152,6 +158,8 @@ func StatusIsNot(statuses ...int) StacktracePred {
|
||||
|
||||
// Addf adds additional data to be logged with this request.
|
||||
func (rl *respLogger) Addf(format string, data ...interface{}) {
|
||||
rl.mutex.Lock()
|
||||
defer rl.mutex.Unlock()
|
||||
rl.addedInfo += "\n" + fmt.Sprintf(format, data...)
|
||||
}
|
||||
|
||||
@@ -162,7 +170,7 @@ func (rl *respLogger) LogArgs() []interface{} {
|
||||
"verb", rl.req.Method,
|
||||
"URI", rl.req.RequestURI,
|
||||
"latency", latency,
|
||||
"userAgent", rl.req.UserAgent(),
|
||||
"userAgent", rl.userAgent,
|
||||
"srcIP", rl.req.RemoteAddr,
|
||||
"hijacked", true,
|
||||
}
|
||||
@@ -171,10 +179,19 @@ func (rl *respLogger) LogArgs() []interface{} {
|
||||
"verb", rl.req.Method,
|
||||
"URI", rl.req.RequestURI,
|
||||
"latency", latency,
|
||||
"userAgent", rl.req.UserAgent(),
|
||||
// We can't get UserAgent from rl.req.UserAgent() here as it accesses headers map,
|
||||
// which can be modified in another goroutine when apiserver request times out.
|
||||
// For example authentication filter modifies request's headers,
|
||||
// This can cause apiserver to crash with unrecoverable fatal error.
|
||||
// More info about concurrent read and write for maps: https://golang.org/doc/go1.6#runtime
|
||||
"userAgent", rl.userAgent,
|
||||
"srcIP", rl.req.RemoteAddr,
|
||||
"resp", rl.status,
|
||||
}
|
||||
|
||||
rl.mutex.Lock()
|
||||
defer rl.mutex.Unlock()
|
||||
|
||||
if len(rl.statusStack) > 0 {
|
||||
args = append(args, "statusStack", rl.statusStack)
|
||||
}
|
||||
|
||||
6
vendor/k8s.io/client-go/pkg/version/base.go
generated
vendored
6
vendor/k8s.io/client-go/pkg/version/base.go
generated
vendored
@@ -3,8 +3,8 @@ package version
|
||||
var (
|
||||
gitMajor = "1"
|
||||
gitMinor = "21"
|
||||
gitVersion = "v1.21.6-k3s1"
|
||||
gitCommit = "2500169b04d85bb5c5541a3c99cb1f0adc77da55"
|
||||
gitVersion = "v1.21.7-k3s1"
|
||||
gitCommit = "e88164b6f545ced9e4ae580c788b1835738b1f6c"
|
||||
gitTreeState = "clean"
|
||||
buildDate = "2021-10-28T15:54:24Z"
|
||||
buildDate = "2021-11-17T22:40:17Z"
|
||||
)
|
||||
|
||||
11
vendor/k8s.io/cloud-provider/controllers/service/controller.go
generated
vendored
11
vendor/k8s.io/cloud-provider/controllers/service/controller.go
generated
vendored
@@ -55,6 +55,9 @@ const (
|
||||
// should be changed appropriately.
|
||||
minRetryDelay = 5 * time.Second
|
||||
maxRetryDelay = 300 * time.Second
|
||||
// ToBeDeletedTaint is a taint used by the CLuster Autoscaler before marking a node for deletion. Defined in
|
||||
// https://github.com/kubernetes/autoscaler/blob/e80ab518340f88f364fe3ef063f8303755125971/cluster-autoscaler/utils/deletetaint/delete.go#L36
|
||||
ToBeDeletedTaint = "ToBeDeletedByClusterAutoscaler"
|
||||
)
|
||||
|
||||
type cachedService struct {
|
||||
@@ -671,6 +674,14 @@ func (s *Controller) getNodeConditionPredicate() NodeConditionPredicate {
|
||||
return false
|
||||
}
|
||||
|
||||
// Remove nodes that are about to be deleted by the cluster autoscaler.
|
||||
for _, taint := range node.Spec.Taints {
|
||||
if taint.Key == ToBeDeletedTaint {
|
||||
klog.V(4).Infof("Ignoring node %v with autoscaler taint %+v", node.Name, taint)
|
||||
return false
|
||||
}
|
||||
}
|
||||
|
||||
// If we have no info, don't accept
|
||||
if len(node.Status.Conditions) == 0 {
|
||||
return false
|
||||
|
||||
2
vendor/k8s.io/cloud-provider/go.mod
generated
vendored
2
vendor/k8s.io/cloud-provider/go.mod
generated
vendored
@@ -16,7 +16,7 @@ require (
|
||||
k8s.io/component-base v0.0.0
|
||||
k8s.io/controller-manager v0.0.0
|
||||
k8s.io/klog/v2 v2.9.0
|
||||
k8s.io/utils v0.0.0-20201110183641-67b214c5f920
|
||||
k8s.io/utils v0.0.0-20210521133846-da695404a2bc
|
||||
)
|
||||
|
||||
replace (
|
||||
|
||||
8
vendor/k8s.io/cloud-provider/go.sum
generated
vendored
8
vendor/k8s.io/cloud-provider/go.sum
generated
vendored
@@ -672,10 +672,10 @@ k8s.io/gengo v0.0.0-20200413195148-3a45101e95ac/go.mod h1:ezvh/TsK7cY6rbqRK0oQQ8
|
||||
k8s.io/klog/v2 v2.0.0/go.mod h1:PBfzABfn139FHAV07az/IF9Wp1bkk3vpT2XSJ76fSDE=
|
||||
k8s.io/klog/v2 v2.9.0 h1:D7HV+n1V57XeZ0m6tdRkfknthUaM06VFbWldOFh8kzM=
|
||||
k8s.io/klog/v2 v2.9.0/go.mod h1:hy9LJ/NvuK+iVyP4Ehqva4HxZG/oXyIS3n3Jmire4Ec=
|
||||
k8s.io/kube-openapi v0.0.0-20210305001622-591a79e4bda7 h1:vEx13qjvaZ4yfObSSXW7BrMc/KQBBT/Jyee8XtLf4x0=
|
||||
k8s.io/kube-openapi v0.0.0-20210305001622-591a79e4bda7/go.mod h1:wXW5VT87nVfh/iLV8FpR2uDvrFyomxbtb1KivDbvPTE=
|
||||
k8s.io/utils v0.0.0-20201110183641-67b214c5f920 h1:CbnUZsM497iRC5QMVkHwyl8s2tB3g7yaSHkYPkpgelw=
|
||||
k8s.io/utils v0.0.0-20201110183641-67b214c5f920/go.mod h1:jPW/WVKK9YHAvNhRxK0md/EJ228hCsBRufyofKtW8HA=
|
||||
k8s.io/kube-openapi v0.0.0-20211110012726-3cc51fd1e909 h1:s77MRc/+/eQjsF89MB12JssAlsoi9mnNoaacRqibeAU=
|
||||
k8s.io/kube-openapi v0.0.0-20211110012726-3cc51fd1e909/go.mod h1:wXW5VT87nVfh/iLV8FpR2uDvrFyomxbtb1KivDbvPTE=
|
||||
k8s.io/utils v0.0.0-20210521133846-da695404a2bc h1:dx6VGe+PnOW/kD/2UV4aUSsRfJGd7+lcqgJ6Xg0HwUs=
|
||||
k8s.io/utils v0.0.0-20210521133846-da695404a2bc/go.mod h1:jPW/WVKK9YHAvNhRxK0md/EJ228hCsBRufyofKtW8HA=
|
||||
rsc.io/binaryregexp v0.2.0/go.mod h1:qTv7/COck+e2FymRvadv62gMdZztPaShugOCi3I+8D8=
|
||||
rsc.io/quote/v3 v3.1.0/go.mod h1:yEA65RcK8LyAZtP9Kv3t0HmxON59tX3rD+tICJqUlj0=
|
||||
rsc.io/sampler v1.3.0/go.mod h1:T1hPZKmBbMNahiBKFy5HrXp6adAjACjK9JXDnKaTXpA=
|
||||
|
||||
4
vendor/k8s.io/component-base/metrics/options.go
generated
vendored
4
vendor/k8s.io/component-base/metrics/options.go
generated
vendored
@@ -58,8 +58,8 @@ func (o *Options) Validate() []error {
|
||||
|
||||
// AddFlags adds flags for exposing component metrics.
|
||||
func (o *Options) AddFlags(fs *pflag.FlagSet) {
|
||||
if o != nil {
|
||||
o = NewOptions()
|
||||
if o == nil {
|
||||
return
|
||||
}
|
||||
fs.StringVar(&o.ShowHiddenMetricsForVersion, "show-hidden-metrics-for-version", o.ShowHiddenMetricsForVersion,
|
||||
"The previous version for which you want to show hidden metrics. "+
|
||||
|
||||
6
vendor/k8s.io/component-base/version/base.go
generated
vendored
6
vendor/k8s.io/component-base/version/base.go
generated
vendored
@@ -3,8 +3,8 @@ package version
|
||||
var (
|
||||
gitMajor = "1"
|
||||
gitMinor = "21"
|
||||
gitVersion = "v1.21.6-k3s1"
|
||||
gitCommit = "2500169b04d85bb5c5541a3c99cb1f0adc77da55"
|
||||
gitVersion = "v1.21.7-k3s1"
|
||||
gitCommit = "e88164b6f545ced9e4ae580c788b1835738b1f6c"
|
||||
gitTreeState = "clean"
|
||||
buildDate = "2021-10-28T15:54:24Z"
|
||||
buildDate = "2021-11-17T22:40:17Z"
|
||||
)
|
||||
|
||||
2
vendor/k8s.io/csi-translation-lib/go.sum
generated
vendored
2
vendor/k8s.io/csi-translation-lib/go.sum
generated
vendored
@@ -151,7 +151,7 @@ k8s.io/gengo v0.0.0-20200413195148-3a45101e95ac/go.mod h1:ezvh/TsK7cY6rbqRK0oQQ8
|
||||
k8s.io/klog/v2 v2.0.0/go.mod h1:PBfzABfn139FHAV07az/IF9Wp1bkk3vpT2XSJ76fSDE=
|
||||
k8s.io/klog/v2 v2.9.0 h1:D7HV+n1V57XeZ0m6tdRkfknthUaM06VFbWldOFh8kzM=
|
||||
k8s.io/klog/v2 v2.9.0/go.mod h1:hy9LJ/NvuK+iVyP4Ehqva4HxZG/oXyIS3n3Jmire4Ec=
|
||||
k8s.io/kube-openapi v0.0.0-20210305001622-591a79e4bda7/go.mod h1:wXW5VT87nVfh/iLV8FpR2uDvrFyomxbtb1KivDbvPTE=
|
||||
k8s.io/kube-openapi v0.0.0-20211110012726-3cc51fd1e909/go.mod h1:wXW5VT87nVfh/iLV8FpR2uDvrFyomxbtb1KivDbvPTE=
|
||||
sigs.k8s.io/structured-merge-diff/v4 v4.0.2/go.mod h1:bJZC9H9iH24zzfZ/41RGcq60oK1F7G282QMXDPYydCw=
|
||||
sigs.k8s.io/structured-merge-diff/v4 v4.1.2 h1:Hr/htKFmJEbtMgS/UD0N+gtgctAqz81t3nu+sPzynno=
|
||||
sigs.k8s.io/structured-merge-diff/v4 v4.1.2/go.mod h1:j/nl6xW8vLS49O8YvXW1ocPhZawJtm+Yrr7PPRQ0Vg4=
|
||||
|
||||
121
vendor/k8s.io/kube-openapi/pkg/handler/handler.go
generated
vendored
121
vendor/k8s.io/kube-openapi/pkg/handler/handler.go
generated
vendored
@@ -35,7 +35,7 @@ import (
|
||||
jsoniter "github.com/json-iterator/go"
|
||||
"github.com/munnerz/goautoneg"
|
||||
"gopkg.in/yaml.v2"
|
||||
|
||||
klog "k8s.io/klog/v2"
|
||||
"k8s.io/kube-openapi/pkg/builder"
|
||||
"k8s.io/kube-openapi/pkg/common"
|
||||
)
|
||||
@@ -57,13 +57,40 @@ type OpenAPIService struct {
|
||||
|
||||
lastModified time.Time
|
||||
|
||||
specBytes []byte
|
||||
specPb []byte
|
||||
specPbGz []byte
|
||||
jsonCache cache
|
||||
protoCache cache
|
||||
}
|
||||
|
||||
specBytesETag string
|
||||
specPbETag string
|
||||
specPbGzETag string
|
||||
type cache struct {
|
||||
BuildCache func() ([]byte, error)
|
||||
once sync.Once
|
||||
bytes []byte
|
||||
etag string
|
||||
err error
|
||||
}
|
||||
|
||||
func (c *cache) Get() ([]byte, string, error) {
|
||||
c.once.Do(func() {
|
||||
bytes, err := c.BuildCache()
|
||||
// if there is an error updating the cache, there can be situations where
|
||||
// c.bytes contains a valid value (carried over from the previous update)
|
||||
// but c.err is also not nil; the cache user is expected to check for this
|
||||
c.err = err
|
||||
if c.err == nil {
|
||||
// don't override previous spec if we had an error
|
||||
c.bytes = bytes
|
||||
c.etag = computeETag(c.bytes)
|
||||
}
|
||||
})
|
||||
return c.bytes, c.etag, c.err
|
||||
}
|
||||
|
||||
func (c *cache) New(cacheBuilder func() ([]byte, error)) cache {
|
||||
return cache{
|
||||
bytes: c.bytes,
|
||||
etag: c.etag,
|
||||
BuildCache: cacheBuilder,
|
||||
}
|
||||
}
|
||||
|
||||
func init() {
|
||||
@@ -73,6 +100,9 @@ func init() {
|
||||
}
|
||||
|
||||
func computeETag(data []byte) string {
|
||||
if data == nil {
|
||||
return ""
|
||||
}
|
||||
return fmt.Sprintf("\"%X\"", sha512.Sum512(data))
|
||||
}
|
||||
|
||||
@@ -85,55 +115,44 @@ func NewOpenAPIService(spec *spec.Swagger) (*OpenAPIService, error) {
|
||||
return o, nil
|
||||
}
|
||||
|
||||
func (o *OpenAPIService) getSwaggerBytes() ([]byte, string, time.Time) {
|
||||
func (o *OpenAPIService) getSwaggerBytes() ([]byte, string, time.Time, error) {
|
||||
o.rwMutex.RLock()
|
||||
defer o.rwMutex.RUnlock()
|
||||
return o.specBytes, o.specBytesETag, o.lastModified
|
||||
specBytes, etag, err := o.jsonCache.Get()
|
||||
if err != nil {
|
||||
return nil, "", time.Time{}, err
|
||||
}
|
||||
return specBytes, etag, o.lastModified, nil
|
||||
}
|
||||
|
||||
func (o *OpenAPIService) getSwaggerPbBytes() ([]byte, string, time.Time) {
|
||||
func (o *OpenAPIService) getSwaggerPbBytes() ([]byte, string, time.Time, error) {
|
||||
o.rwMutex.RLock()
|
||||
defer o.rwMutex.RUnlock()
|
||||
return o.specPb, o.specPbETag, o.lastModified
|
||||
}
|
||||
|
||||
func (o *OpenAPIService) getSwaggerPbGzBytes() ([]byte, string, time.Time) {
|
||||
o.rwMutex.RLock()
|
||||
defer o.rwMutex.RUnlock()
|
||||
return o.specPbGz, o.specPbGzETag, o.lastModified
|
||||
specPb, etag, err := o.protoCache.Get()
|
||||
if err != nil {
|
||||
return nil, "", time.Time{}, err
|
||||
}
|
||||
return specPb, etag, o.lastModified, nil
|
||||
}
|
||||
|
||||
func (o *OpenAPIService) UpdateSpec(openapiSpec *spec.Swagger) (err error) {
|
||||
specBytes, err := jsoniter.ConfigCompatibleWithStandardLibrary.Marshal(openapiSpec)
|
||||
if err != nil {
|
||||
return err
|
||||
}
|
||||
var json map[string]interface{}
|
||||
if err := jsoniter.ConfigCompatibleWithStandardLibrary.Unmarshal(specBytes, &json); err != nil {
|
||||
return err
|
||||
}
|
||||
specPb, err := ToProtoBinary(json)
|
||||
if err != nil {
|
||||
return err
|
||||
}
|
||||
specPbGz := toGzip(specPb)
|
||||
|
||||
specBytesETag := computeETag(specBytes)
|
||||
specPbETag := computeETag(specPb)
|
||||
specPbGzETag := computeETag(specPbGz)
|
||||
|
||||
lastModified := time.Now()
|
||||
|
||||
o.rwMutex.Lock()
|
||||
defer o.rwMutex.Unlock()
|
||||
|
||||
o.specBytes = specBytes
|
||||
o.specPb = specPb
|
||||
o.specPbGz = specPbGz
|
||||
o.specBytesETag = specBytesETag
|
||||
o.specPbETag = specPbETag
|
||||
o.specPbGzETag = specPbGzETag
|
||||
o.lastModified = lastModified
|
||||
o.jsonCache = o.jsonCache.New(func() ([]byte, error) {
|
||||
return jsoniter.ConfigCompatibleWithStandardLibrary.Marshal(openapiSpec)
|
||||
})
|
||||
o.protoCache = o.protoCache.New(func() ([]byte, error) {
|
||||
json, _, err := o.jsonCache.Get()
|
||||
if err != nil {
|
||||
return nil, err
|
||||
}
|
||||
var jMap map[string]interface{}
|
||||
if err := jsoniter.ConfigCompatibleWithStandardLibrary.Unmarshal(json, &jMap); err != nil {
|
||||
return nil, err
|
||||
}
|
||||
return ToProtoBinary(jMap)
|
||||
})
|
||||
o.lastModified = time.Now()
|
||||
|
||||
return nil
|
||||
}
|
||||
@@ -212,7 +231,7 @@ func (o *OpenAPIService) RegisterOpenAPIVersionedService(servePath string, handl
|
||||
accepted := []struct {
|
||||
Type string
|
||||
SubType string
|
||||
GetDataAndETag func() ([]byte, string, time.Time)
|
||||
GetDataAndETag func() ([]byte, string, time.Time, error)
|
||||
}{
|
||||
{"application", "json", o.getSwaggerBytes},
|
||||
{"application", "com.github.proto-openapi.spec.v2@v1.0+protobuf", o.getSwaggerPbBytes},
|
||||
@@ -236,7 +255,15 @@ func (o *OpenAPIService) RegisterOpenAPIVersionedService(servePath string, handl
|
||||
}
|
||||
|
||||
// serve the first matching media type in the sorted clause list
|
||||
data, etag, lastModified := accepts.GetDataAndETag()
|
||||
data, etag, lastModified, err := accepts.GetDataAndETag()
|
||||
if err != nil {
|
||||
klog.Errorf("Error in OpenAPI handler: %s", err)
|
||||
// only return a 503 if we have no older cache data to serve
|
||||
if data == nil {
|
||||
w.WriteHeader(http.StatusServiceUnavailable)
|
||||
return
|
||||
}
|
||||
}
|
||||
w.Header().Set("Etag", etag)
|
||||
// ServeContent will take care of caching using eTag.
|
||||
http.ServeContent(w, r, servePath, lastModified, bytes.NewReader(data))
|
||||
|
||||
160
vendor/k8s.io/kubectl/pkg/cmd/cp/cp.go
generated
vendored
160
vendor/k8s.io/kubectl/pkg/cmd/cp/cp.go
generated
vendored
@@ -24,11 +24,8 @@ import (
|
||||
"io"
|
||||
"io/ioutil"
|
||||
"os"
|
||||
"path"
|
||||
"path/filepath"
|
||||
"strings"
|
||||
|
||||
"github.com/lithammer/dedent"
|
||||
"github.com/spf13/cobra"
|
||||
|
||||
"k8s.io/cli-runtime/pkg/genericclioptions"
|
||||
@@ -66,12 +63,6 @@ var (
|
||||
|
||||
# Copy /tmp/foo from a remote pod to /tmp/bar locally
|
||||
kubectl cp <some-namespace>/<some-pod>:/tmp/foo /tmp/bar`))
|
||||
|
||||
cpUsageStr = dedent.Dedent(`
|
||||
expected 'cp <file-spec-src> <file-spec-dest> [-c container]'.
|
||||
<file-spec> is:
|
||||
[namespace/]pod-name:/file/path for a remote file
|
||||
/file/path for a local file`)
|
||||
)
|
||||
|
||||
// CopyOptions have the data required to perform the copy operation
|
||||
@@ -106,6 +97,7 @@ func NewCmdCp(f cmdutil.Factory, ioStreams genericclioptions.IOStreams) *cobra.C
|
||||
Example: cpExample,
|
||||
Run: func(cmd *cobra.Command, args []string) {
|
||||
cmdutil.CheckErr(o.Complete(f, cmd))
|
||||
cmdutil.CheckErr(o.Validate(cmd, args))
|
||||
cmdutil.CheckErr(o.Run(args))
|
||||
},
|
||||
}
|
||||
@@ -115,27 +107,22 @@ func NewCmdCp(f cmdutil.Factory, ioStreams genericclioptions.IOStreams) *cobra.C
|
||||
return cmd
|
||||
}
|
||||
|
||||
type fileSpec struct {
|
||||
PodNamespace string
|
||||
PodName string
|
||||
File string
|
||||
}
|
||||
|
||||
var (
|
||||
errFileSpecDoesntMatchFormat = errors.New("filespec must match the canonical format: [[namespace/]pod:]file/path")
|
||||
errFileCannotBeEmpty = errors.New("filepath can not be empty")
|
||||
)
|
||||
|
||||
func extractFileSpec(arg string) (fileSpec, error) {
|
||||
i := strings.Index(arg, ":")
|
||||
|
||||
if i == -1 {
|
||||
return fileSpec{File: arg}, nil
|
||||
}
|
||||
// filespec starting with a semicolon is invalid
|
||||
if i == 0 {
|
||||
return fileSpec{}, errFileSpecDoesntMatchFormat
|
||||
}
|
||||
if i == -1 {
|
||||
return fileSpec{
|
||||
File: newLocalPath(arg),
|
||||
}, nil
|
||||
}
|
||||
|
||||
pod, file := arg[:i], arg[i+1:]
|
||||
pieces := strings.Split(pod, "/")
|
||||
@@ -143,13 +130,13 @@ func extractFileSpec(arg string) (fileSpec, error) {
|
||||
case 1:
|
||||
return fileSpec{
|
||||
PodName: pieces[0],
|
||||
File: file,
|
||||
File: newRemotePath(file),
|
||||
}, nil
|
||||
case 2:
|
||||
return fileSpec{
|
||||
PodNamespace: pieces[0],
|
||||
PodName: pieces[1],
|
||||
File: file,
|
||||
File: newRemotePath(file),
|
||||
}, nil
|
||||
default:
|
||||
return fileSpec{}, errFileSpecDoesntMatchFormat
|
||||
@@ -183,16 +170,13 @@ func (o *CopyOptions) Complete(f cmdutil.Factory, cmd *cobra.Command) error {
|
||||
// Validate makes sure provided values for CopyOptions are valid
|
||||
func (o *CopyOptions) Validate(cmd *cobra.Command, args []string) error {
|
||||
if len(args) != 2 {
|
||||
return cmdutil.UsageErrorf(cmd, cpUsageStr)
|
||||
return fmt.Errorf("source and destination are required")
|
||||
}
|
||||
return nil
|
||||
}
|
||||
|
||||
// Run performs the execution
|
||||
func (o *CopyOptions) Run(args []string) error {
|
||||
if len(args) < 2 {
|
||||
return fmt.Errorf("source and destination are required")
|
||||
}
|
||||
srcSpec, err := extractFileSpec(args[0])
|
||||
if err != nil {
|
||||
return err
|
||||
@@ -205,6 +189,9 @@ func (o *CopyOptions) Run(args []string) error {
|
||||
if len(srcSpec.PodName) != 0 && len(destSpec.PodName) != 0 {
|
||||
return fmt.Errorf("one of src or dest must be a local file specification")
|
||||
}
|
||||
if len(srcSpec.File.String()) == 0 || len(destSpec.File.String()) == 0 {
|
||||
return errors.New("filepath can not be empty")
|
||||
}
|
||||
|
||||
if len(srcSpec.PodName) != 0 {
|
||||
return o.copyFromPod(srcSpec, destSpec)
|
||||
@@ -231,7 +218,7 @@ func (o *CopyOptions) checkDestinationIsDir(dest fileSpec) error {
|
||||
PodName: dest.PodName,
|
||||
},
|
||||
|
||||
Command: []string{"test", "-d", dest.File},
|
||||
Command: []string{"test", "-d", dest.File.String()},
|
||||
Executor: &exec.DefaultRemoteExecutor{},
|
||||
}
|
||||
|
||||
@@ -239,30 +226,24 @@ func (o *CopyOptions) checkDestinationIsDir(dest fileSpec) error {
|
||||
}
|
||||
|
||||
func (o *CopyOptions) copyToPod(src, dest fileSpec, options *exec.ExecOptions) error {
|
||||
if len(src.File) == 0 || len(dest.File) == 0 {
|
||||
return errFileCannotBeEmpty
|
||||
}
|
||||
if _, err := os.Stat(src.File); err != nil {
|
||||
if _, err := os.Stat(src.File.String()); err != nil {
|
||||
return fmt.Errorf("%s doesn't exist in local filesystem", src.File)
|
||||
}
|
||||
reader, writer := io.Pipe()
|
||||
|
||||
// strip trailing slash (if any)
|
||||
if dest.File != "/" && strings.HasSuffix(string(dest.File[len(dest.File)-1]), "/") {
|
||||
dest.File = dest.File[:len(dest.File)-1]
|
||||
}
|
||||
srcFile := src.File.(localPath)
|
||||
destFile := dest.File.(remotePath)
|
||||
|
||||
if err := o.checkDestinationIsDir(dest); err == nil {
|
||||
// If no error, dest.File was found to be a directory.
|
||||
// Copy specified src into it
|
||||
dest.File = dest.File + "/" + path.Base(src.File)
|
||||
destFile = destFile.Join(srcFile.Base())
|
||||
}
|
||||
|
||||
go func() {
|
||||
go func(src localPath, dest remotePath, writer io.WriteCloser) {
|
||||
defer writer.Close()
|
||||
err := makeTar(src.File, dest.File, writer)
|
||||
cmdutil.CheckErr(err)
|
||||
}()
|
||||
cmdutil.CheckErr(makeTar(src, dest, writer))
|
||||
}(srcFile, destFile, writer)
|
||||
var cmdArr []string
|
||||
|
||||
// TODO: Improve error messages by first testing if 'tar' is present in the container?
|
||||
@@ -271,9 +252,9 @@ func (o *CopyOptions) copyToPod(src, dest fileSpec, options *exec.ExecOptions) e
|
||||
} else {
|
||||
cmdArr = []string{"tar", "-xmf", "-"}
|
||||
}
|
||||
destDir := path.Dir(dest.File)
|
||||
if len(destDir) > 0 {
|
||||
cmdArr = append(cmdArr, "-C", destDir)
|
||||
destFileDir := destFile.Dir().String()
|
||||
if len(destFileDir) > 0 {
|
||||
cmdArr = append(cmdArr, "-C", destFileDir)
|
||||
}
|
||||
|
||||
options.StreamOptions = exec.StreamOptions{
|
||||
@@ -294,10 +275,6 @@ func (o *CopyOptions) copyToPod(src, dest fileSpec, options *exec.ExecOptions) e
|
||||
}
|
||||
|
||||
func (o *CopyOptions) copyFromPod(src, dest fileSpec) error {
|
||||
if len(src.File) == 0 || len(dest.File) == 0 {
|
||||
return errFileCannotBeEmpty
|
||||
}
|
||||
|
||||
reader, outStream := io.Pipe()
|
||||
options := &exec.ExecOptions{
|
||||
StreamOptions: exec.StreamOptions{
|
||||
@@ -312,7 +289,7 @@ func (o *CopyOptions) copyFromPod(src, dest fileSpec) error {
|
||||
},
|
||||
|
||||
// TODO: Improve error messages by first testing if 'tar' is present in the container?
|
||||
Command: []string{"tar", "cf", "-", src.File},
|
||||
Command: []string{"tar", "cf", "-", src.File.String()},
|
||||
Executor: &exec.DefaultRemoteExecutor{},
|
||||
}
|
||||
|
||||
@@ -321,49 +298,28 @@ func (o *CopyOptions) copyFromPod(src, dest fileSpec) error {
|
||||
err := o.execute(options)
|
||||
cmdutil.CheckErr(err)
|
||||
}()
|
||||
prefix := getPrefix(src.File)
|
||||
prefix = path.Clean(prefix)
|
||||
|
||||
srcFile := src.File.(remotePath)
|
||||
destFile := dest.File.(localPath)
|
||||
|
||||
// remove extraneous path shortcuts - these could occur if a path contained extra "../"
|
||||
// and attempted to navigate beyond "/" in a remote filesystem
|
||||
prefix = stripPathShortcuts(prefix)
|
||||
return o.untarAll(src, reader, dest.File, prefix)
|
||||
prefix := stripPathShortcuts(srcFile.StripSlashes().Clean().String())
|
||||
return o.untarAll(src.PodNamespace, src.PodName, prefix, srcFile, destFile, reader)
|
||||
}
|
||||
|
||||
// stripPathShortcuts removes any leading or trailing "../" from a given path
|
||||
func stripPathShortcuts(p string) string {
|
||||
newPath := path.Clean(p)
|
||||
trimmed := strings.TrimPrefix(newPath, "../")
|
||||
|
||||
for trimmed != newPath {
|
||||
newPath = trimmed
|
||||
trimmed = strings.TrimPrefix(newPath, "../")
|
||||
}
|
||||
|
||||
// trim leftover {".", ".."}
|
||||
if newPath == "." || newPath == ".." {
|
||||
newPath = ""
|
||||
}
|
||||
|
||||
if len(newPath) > 0 && string(newPath[0]) == "/" {
|
||||
return newPath[1:]
|
||||
}
|
||||
|
||||
return newPath
|
||||
}
|
||||
|
||||
func makeTar(srcPath, destPath string, writer io.Writer) error {
|
||||
func makeTar(src localPath, dest remotePath, writer io.Writer) error {
|
||||
// TODO: use compression here?
|
||||
tarWriter := tar.NewWriter(writer)
|
||||
defer tarWriter.Close()
|
||||
|
||||
srcPath = path.Clean(srcPath)
|
||||
destPath = path.Clean(destPath)
|
||||
return recursiveTar(path.Dir(srcPath), path.Base(srcPath), path.Dir(destPath), path.Base(destPath), tarWriter)
|
||||
srcPath := src.Clean()
|
||||
destPath := dest.Clean()
|
||||
return recursiveTar(srcPath.Dir(), srcPath.Base(), destPath.Dir(), destPath.Base(), tarWriter)
|
||||
}
|
||||
|
||||
func recursiveTar(srcBase, srcFile, destBase, destFile string, tw *tar.Writer) error {
|
||||
srcPath := path.Join(srcBase, srcFile)
|
||||
matchedPaths, err := filepath.Glob(srcPath)
|
||||
func recursiveTar(srcDir, srcFile localPath, destDir, destFile remotePath, tw *tar.Writer) error {
|
||||
matchedPaths, err := srcDir.Join(srcFile).Glob()
|
||||
if err != nil {
|
||||
return err
|
||||
}
|
||||
@@ -380,13 +336,14 @@ func recursiveTar(srcBase, srcFile, destBase, destFile string, tw *tar.Writer) e
|
||||
if len(files) == 0 {
|
||||
//case empty directory
|
||||
hdr, _ := tar.FileInfoHeader(stat, fpath)
|
||||
hdr.Name = destFile
|
||||
hdr.Name = destFile.String()
|
||||
if err := tw.WriteHeader(hdr); err != nil {
|
||||
return err
|
||||
}
|
||||
}
|
||||
for _, f := range files {
|
||||
if err := recursiveTar(srcBase, path.Join(srcFile, f.Name()), destBase, path.Join(destFile, f.Name()), tw); err != nil {
|
||||
if err := recursiveTar(srcDir, srcFile.Join(newLocalPath(f.Name())),
|
||||
destDir, destFile.Join(newRemotePath(f.Name())), tw); err != nil {
|
||||
return err
|
||||
}
|
||||
}
|
||||
@@ -400,7 +357,7 @@ func recursiveTar(srcBase, srcFile, destBase, destFile string, tw *tar.Writer) e
|
||||
}
|
||||
|
||||
hdr.Linkname = target
|
||||
hdr.Name = destFile
|
||||
hdr.Name = destFile.String()
|
||||
if err := tw.WriteHeader(hdr); err != nil {
|
||||
return err
|
||||
}
|
||||
@@ -410,7 +367,7 @@ func recursiveTar(srcBase, srcFile, destBase, destFile string, tw *tar.Writer) e
|
||||
if err != nil {
|
||||
return err
|
||||
}
|
||||
hdr.Name = destFile
|
||||
hdr.Name = destFile.String()
|
||||
|
||||
if err := tw.WriteHeader(hdr); err != nil {
|
||||
return err
|
||||
@@ -431,7 +388,7 @@ func recursiveTar(srcBase, srcFile, destBase, destFile string, tw *tar.Writer) e
|
||||
return nil
|
||||
}
|
||||
|
||||
func (o *CopyOptions) untarAll(src fileSpec, reader io.Reader, destDir, prefix string) error {
|
||||
func (o *CopyOptions) untarAll(ns, pod string, prefix string, src remotePath, dest localPath, reader io.Reader) error {
|
||||
symlinkWarningPrinted := false
|
||||
// TODO: use compression here?
|
||||
tarReader := tar.NewReader(reader)
|
||||
@@ -455,19 +412,21 @@ func (o *CopyOptions) untarAll(src fileSpec, reader io.Reader, destDir, prefix s
|
||||
|
||||
// basic file information
|
||||
mode := header.FileInfo().Mode()
|
||||
destFileName := filepath.Join(destDir, header.Name[len(prefix):])
|
||||
// header.Name is a name of the REMOTE file, so we need to create
|
||||
// a remotePath so that it goes through appropriate processing related
|
||||
// with cleaning remote paths
|
||||
destFileName := dest.Join(newRemotePath(header.Name[len(prefix):]))
|
||||
|
||||
if !isDestRelative(destDir, destFileName) {
|
||||
if !isRelative(dest, destFileName) {
|
||||
fmt.Fprintf(o.IOStreams.ErrOut, "warning: file %q is outside target destination, skipping\n", destFileName)
|
||||
continue
|
||||
}
|
||||
|
||||
baseName := filepath.Dir(destFileName)
|
||||
if err := os.MkdirAll(baseName, 0755); err != nil {
|
||||
if err := os.MkdirAll(destFileName.Dir().String(), 0755); err != nil {
|
||||
return err
|
||||
}
|
||||
if header.FileInfo().IsDir() {
|
||||
if err := os.MkdirAll(destFileName, 0755); err != nil {
|
||||
if err := os.MkdirAll(destFileName.String(), 0755); err != nil {
|
||||
return err
|
||||
}
|
||||
continue
|
||||
@@ -475,14 +434,16 @@ func (o *CopyOptions) untarAll(src fileSpec, reader io.Reader, destDir, prefix s
|
||||
|
||||
if mode&os.ModeSymlink != 0 {
|
||||
if !symlinkWarningPrinted && len(o.ExecParentCmdName) > 0 {
|
||||
fmt.Fprintf(o.IOStreams.ErrOut, "warning: skipping symlink: %q -> %q (consider using \"%s exec -n %q %q -- tar cf - %q | tar xf -\")\n", destFileName, header.Linkname, o.ExecParentCmdName, src.PodNamespace, src.PodName, src.File)
|
||||
fmt.Fprintf(o.IOStreams.ErrOut,
|
||||
"warning: skipping symlink: %q -> %q (consider using \"%s exec -n %q %q -- tar cf - %q | tar xf -\")\n",
|
||||
destFileName, header.Linkname, o.ExecParentCmdName, ns, pod, src)
|
||||
symlinkWarningPrinted = true
|
||||
continue
|
||||
}
|
||||
fmt.Fprintf(o.IOStreams.ErrOut, "warning: skipping symlink: %q -> %q\n", destFileName, header.Linkname)
|
||||
continue
|
||||
}
|
||||
outFile, err := os.Create(destFileName)
|
||||
outFile, err := os.Create(destFileName.String())
|
||||
if err != nil {
|
||||
return err
|
||||
}
|
||||
@@ -498,21 +459,6 @@ func (o *CopyOptions) untarAll(src fileSpec, reader io.Reader, destDir, prefix s
|
||||
return nil
|
||||
}
|
||||
|
||||
// isDestRelative returns true if dest is pointing outside the base directory,
|
||||
// false otherwise.
|
||||
func isDestRelative(base, dest string) bool {
|
||||
relative, err := filepath.Rel(base, dest)
|
||||
if err != nil {
|
||||
return false
|
||||
}
|
||||
return relative == "." || relative == stripPathShortcuts(relative)
|
||||
}
|
||||
|
||||
func getPrefix(file string) string {
|
||||
// tar strips the leading '/' if it's there, so we will too
|
||||
return strings.TrimLeft(file, "/")
|
||||
}
|
||||
|
||||
func (o *CopyOptions) execute(options *exec.ExecOptions) error {
|
||||
if len(options.Namespace) == 0 {
|
||||
options.Namespace = o.Namespace
|
||||
|
||||
161
vendor/k8s.io/kubectl/pkg/cmd/cp/filespec.go
generated
vendored
Normal file
161
vendor/k8s.io/kubectl/pkg/cmd/cp/filespec.go
generated
vendored
Normal file
@@ -0,0 +1,161 @@
|
||||
/*
|
||||
Copyright 2021 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 cp
|
||||
|
||||
import (
|
||||
"path"
|
||||
"path/filepath"
|
||||
"strings"
|
||||
)
|
||||
|
||||
type fileSpec struct {
|
||||
PodName string
|
||||
PodNamespace string
|
||||
File pathSpec
|
||||
}
|
||||
|
||||
type pathSpec interface {
|
||||
String() string
|
||||
}
|
||||
|
||||
// localPath represents a client-native path, which will differ based
|
||||
// on the client OS, its methods will use path/filepath package which
|
||||
// is OS dependant
|
||||
type localPath struct {
|
||||
file string
|
||||
}
|
||||
|
||||
func newLocalPath(fileName string) localPath {
|
||||
file := stripTrailingSlash(fileName)
|
||||
return localPath{file: file}
|
||||
}
|
||||
|
||||
func (p localPath) String() string {
|
||||
return p.file
|
||||
}
|
||||
|
||||
func (p localPath) Dir() localPath {
|
||||
return newLocalPath(filepath.Dir(p.file))
|
||||
}
|
||||
|
||||
func (p localPath) Base() localPath {
|
||||
return newLocalPath(filepath.Base(p.file))
|
||||
}
|
||||
|
||||
func (p localPath) Clean() localPath {
|
||||
return newLocalPath(filepath.Clean(p.file))
|
||||
}
|
||||
|
||||
func (p localPath) Join(elem pathSpec) localPath {
|
||||
return newLocalPath(filepath.Join(p.file, elem.String()))
|
||||
}
|
||||
|
||||
func (p localPath) Glob() (matches []string, err error) {
|
||||
return filepath.Glob(p.file)
|
||||
}
|
||||
|
||||
func (p localPath) StripSlashes() localPath {
|
||||
return newLocalPath(stripLeadingSlash(p.file))
|
||||
}
|
||||
|
||||
func isRelative(base, target localPath) bool {
|
||||
relative, err := filepath.Rel(base.String(), target.String())
|
||||
if err != nil {
|
||||
return false
|
||||
}
|
||||
return relative == "." || relative == stripPathShortcuts(relative)
|
||||
}
|
||||
|
||||
// remotePath represents always UNIX path, its methods will use path
|
||||
// package which is always using `/`
|
||||
type remotePath struct {
|
||||
file string
|
||||
}
|
||||
|
||||
func newRemotePath(fileName string) remotePath {
|
||||
// we assume remote file is a linux container but we need to convert
|
||||
// windows path separators to unix style for consistent processing
|
||||
file := strings.ReplaceAll(stripTrailingSlash(fileName), `\`, "/")
|
||||
return remotePath{file: file}
|
||||
}
|
||||
|
||||
func (p remotePath) String() string {
|
||||
return p.file
|
||||
}
|
||||
|
||||
func (p remotePath) Dir() remotePath {
|
||||
return newRemotePath(path.Dir(p.file))
|
||||
}
|
||||
|
||||
func (p remotePath) Base() remotePath {
|
||||
return newRemotePath(path.Base(p.file))
|
||||
}
|
||||
|
||||
func (p remotePath) Clean() remotePath {
|
||||
return newRemotePath(path.Clean(p.file))
|
||||
}
|
||||
|
||||
func (p remotePath) Join(elem pathSpec) remotePath {
|
||||
return newRemotePath(path.Join(p.file, elem.String()))
|
||||
}
|
||||
|
||||
func (p remotePath) StripShortcuts() remotePath {
|
||||
p = p.Clean()
|
||||
return newRemotePath(stripPathShortcuts(p.file))
|
||||
}
|
||||
|
||||
func (p remotePath) StripSlashes() remotePath {
|
||||
return newRemotePath(stripLeadingSlash(p.file))
|
||||
}
|
||||
|
||||
// strips trailing slash (if any) both unix and windows style
|
||||
func stripTrailingSlash(file string) string {
|
||||
if len(file) == 0 {
|
||||
return file
|
||||
}
|
||||
if file != "/" && strings.HasSuffix(string(file[len(file)-1]), "/") {
|
||||
return file[:len(file)-1]
|
||||
}
|
||||
return file
|
||||
}
|
||||
|
||||
func stripLeadingSlash(file string) string {
|
||||
// tar strips the leading '/' and '\' if it's there, so we will too
|
||||
return strings.TrimLeft(file, `/\`)
|
||||
}
|
||||
|
||||
// stripPathShortcuts removes any leading or trailing "../" from a given path
|
||||
func stripPathShortcuts(p string) string {
|
||||
newPath := p
|
||||
trimmed := strings.TrimPrefix(newPath, "../")
|
||||
|
||||
for trimmed != newPath {
|
||||
newPath = trimmed
|
||||
trimmed = strings.TrimPrefix(newPath, "../")
|
||||
}
|
||||
|
||||
// trim leftover {".", ".."}
|
||||
if newPath == "." || newPath == ".." {
|
||||
newPath = ""
|
||||
}
|
||||
|
||||
if len(newPath) > 0 && string(newPath[0]) == "/" {
|
||||
return newPath[1:]
|
||||
}
|
||||
|
||||
return newPath
|
||||
}
|
||||
4
vendor/k8s.io/kubectl/pkg/cmd/create/create_secret_docker.go
generated
vendored
4
vendor/k8s.io/kubectl/pkg/cmd/create/create_secret_docker.go
generated
vendored
@@ -198,13 +198,13 @@ func (o *CreateSecretDockerRegistryOptions) Complete(f cmdutil.Factory, cmd *cob
|
||||
|
||||
o.Namespace, o.EnforceNamespace, err = f.ToRawKubeConfigLoader().Namespace()
|
||||
if err != nil {
|
||||
return nil
|
||||
return err
|
||||
}
|
||||
|
||||
cmdutil.PrintFlagsWithDryRunStrategy(o.PrintFlags, o.DryRunStrategy)
|
||||
printer, err := o.PrintFlags.ToPrinter()
|
||||
if err != nil {
|
||||
return nil
|
||||
return err
|
||||
}
|
||||
|
||||
o.PrintObj = func(obj runtime.Object) error {
|
||||
|
||||
@@ -303,12 +303,11 @@ func (c *Controller) syncEndpoints(key string) error {
|
||||
return err
|
||||
}
|
||||
|
||||
// This means that if a Service transitions away from a nil selector, any
|
||||
// mirrored EndpointSlices will not be cleaned up. #91072 tracks this issue
|
||||
// for this controller along with the Endpoints and EndpointSlice
|
||||
// controllers.
|
||||
// If a selector is specified, clean up any mirrored slices.
|
||||
if svc.Spec.Selector != nil {
|
||||
return nil
|
||||
klog.V(4).Infof("%s/%s Service now has selector, cleaning up any mirrored EndpointSlices", namespace, name)
|
||||
c.endpointSliceTracker.DeleteService(namespace, name)
|
||||
return c.deleteMirroredSlices(namespace, name)
|
||||
}
|
||||
|
||||
endpointSlices, err := endpointSlicesMirroredForService(c.endpointSliceLister, namespace, name)
|
||||
@@ -371,7 +370,7 @@ func (c *Controller) onServiceUpdate(prevObj, obj interface{}) {
|
||||
service := obj.(*v1.Service)
|
||||
prevService := prevObj.(*v1.Service)
|
||||
if service == nil || prevService == nil {
|
||||
utilruntime.HandleError(fmt.Errorf("onServiceUpdate() expected type v1.Endpoints, got %T, %T", prevObj, obj))
|
||||
utilruntime.HandleError(fmt.Errorf("onServiceUpdate() expected type v1.Service, got %T, %T", prevObj, obj))
|
||||
return
|
||||
}
|
||||
if (service.Spec.Selector == nil) != (prevService.Spec.Selector == nil) {
|
||||
|
||||
@@ -28,7 +28,7 @@ import (
|
||||
|
||||
"k8s.io/klog/v2"
|
||||
|
||||
"k8s.io/api/core/v1"
|
||||
v1 "k8s.io/api/core/v1"
|
||||
"k8s.io/apimachinery/pkg/types"
|
||||
"k8s.io/kubernetes/pkg/volume"
|
||||
"k8s.io/kubernetes/pkg/volume/util"
|
||||
|
||||
25
vendor/k8s.io/kubernetes/pkg/controller/volume/attachdetach/reconciler/reconciler.go
generated
vendored
25
vendor/k8s.io/kubernetes/pkg/controller/volume/attachdetach/reconciler/reconciler.go
generated
vendored
@@ -151,13 +151,13 @@ func (rc *reconciler) reconcile() {
|
||||
// The operation key format is different depending on whether the volume
|
||||
// allows multi attach across different nodes.
|
||||
if util.IsMultiAttachAllowed(attachedVolume.VolumeSpec) {
|
||||
if rc.attacherDetacher.IsOperationPending(attachedVolume.VolumeName, "" /* podName */, attachedVolume.NodeName) {
|
||||
klog.V(10).Infof("Operation for volume %q is already running for node %q. Can't start detach", attachedVolume.VolumeName, attachedVolume.NodeName)
|
||||
if !rc.attacherDetacher.IsOperationSafeToRetry(attachedVolume.VolumeName, "" /* podName */, attachedVolume.NodeName, operationexecutor.DetachOperationName) {
|
||||
klog.V(10).Infof("Operation for volume %q is already running or still in exponential backoff for node %q. Can't start detach", attachedVolume.VolumeName, attachedVolume.NodeName)
|
||||
continue
|
||||
}
|
||||
} else {
|
||||
if rc.attacherDetacher.IsOperationPending(attachedVolume.VolumeName, "" /* podName */, "" /* nodeName */) {
|
||||
klog.V(10).Infof("Operation for volume %q is already running in the cluster. Can't start detach for %q", attachedVolume.VolumeName, attachedVolume.NodeName)
|
||||
if !rc.attacherDetacher.IsOperationSafeToRetry(attachedVolume.VolumeName, "" /* podName */, "" /* nodeName */, operationexecutor.DetachOperationName) {
|
||||
klog.V(10).Infof("Operation for volume %q is already running or still in exponential backoff in the cluster. Can't start detach for %q", attachedVolume.VolumeName, attachedVolume.NodeName)
|
||||
continue
|
||||
}
|
||||
}
|
||||
@@ -193,6 +193,8 @@ func (rc *reconciler) reconcile() {
|
||||
|
||||
// Before triggering volume detach, mark volume as detached and update the node status
|
||||
// If it fails to update node status, skip detach volume
|
||||
// If volume detach operation fails, the volume needs to be added back to report as attached so that node status
|
||||
// has the correct volume attachment information.
|
||||
err = rc.actualStateOfWorld.RemoveVolumeFromReportAsAttached(attachedVolume.VolumeName, attachedVolume.NodeName)
|
||||
if err != nil {
|
||||
klog.V(5).Infof("RemoveVolumeFromReportAsAttached failed while removing volume %q from node %q with: %v",
|
||||
@@ -222,10 +224,17 @@ func (rc *reconciler) reconcile() {
|
||||
klog.Warningf(attachedVolume.GenerateMsgDetailed("attacherDetacher.DetachVolume started", fmt.Sprintf("This volume is not safe to detach, but maxWaitForUnmountDuration %v expired, force detaching", rc.maxWaitForUnmountDuration)))
|
||||
}
|
||||
}
|
||||
if err != nil && !exponentialbackoff.IsExponentialBackoff(err) {
|
||||
// Ignore exponentialbackoff.IsExponentialBackoff errors, they are expected.
|
||||
// Log all other errors.
|
||||
klog.Errorf(attachedVolume.GenerateErrorDetailed("attacherDetacher.DetachVolume failed to start", err).Error())
|
||||
if err != nil {
|
||||
// Add volume back to ReportAsAttached if DetachVolume call failed so that node status updater will add it back to VolumeAttached list.
|
||||
// This function is also called during executing the volume detach operation in operation_generoator.
|
||||
// It is needed here too because DetachVolume call might fail before executing the actual operation in operation_executor (e.g., cannot find volume plugin etc.)
|
||||
rc.actualStateOfWorld.AddVolumeToReportAsAttached(attachedVolume.VolumeName, attachedVolume.NodeName)
|
||||
|
||||
if !exponentialbackoff.IsExponentialBackoff(err) {
|
||||
// Ignore exponentialbackoff.IsExponentialBackoff errors, they are expected.
|
||||
// Log all other errors.
|
||||
klog.Errorf(attachedVolume.GenerateErrorDetailed("attacherDetacher.DetachVolume failed to start", err).Error())
|
||||
}
|
||||
}
|
||||
}
|
||||
}
|
||||
|
||||
@@ -350,7 +350,7 @@ func (c *Controller) pvcAddedUpdated(obj interface{}) {
|
||||
utilruntime.HandleError(fmt.Errorf("couldn't get key for Persistent Volume Claim %#v: %v", pvc, err))
|
||||
return
|
||||
}
|
||||
klog.V(4).InfoS("Got event on PVC", key)
|
||||
klog.V(4).InfoS("Got event on PVC", "pvc", klog.KObj(pvc))
|
||||
|
||||
if protectionutil.NeedToAddFinalizer(pvc, volumeutil.PVCProtectionFinalizer) || protectionutil.IsDeletionCandidate(pvc, volumeutil.PVCProtectionFinalizer) {
|
||||
c.queue.Add(key)
|
||||
|
||||
1
vendor/k8s.io/kubernetes/pkg/kubelet/kuberuntime/logs/logs.go
generated
vendored
1
vendor/k8s.io/kubernetes/pkg/kubelet/kuberuntime/logs/logs.go
generated
vendored
@@ -361,6 +361,7 @@ func ReadLogs(ctx context.Context, path, containerID string, opts *LogOptions, r
|
||||
}
|
||||
return fmt.Errorf("failed to open log file %q: %v", path, err)
|
||||
}
|
||||
defer newF.Close()
|
||||
f.Close()
|
||||
if err := watcher.Remove(f.Name()); err != nil && !os.IsNotExist(err) {
|
||||
klog.ErrorS(err, "Failed to remove file watch", "path", f.Name())
|
||||
|
||||
5
vendor/k8s.io/kubernetes/pkg/kubelet/stats/host_stats_provider.go
generated
vendored
5
vendor/k8s.io/kubernetes/pkg/kubelet/stats/host_stats_provider.go
generated
vendored
@@ -18,6 +18,7 @@ package stats
|
||||
|
||||
import (
|
||||
"fmt"
|
||||
"os"
|
||||
"path/filepath"
|
||||
|
||||
cadvisorapiv2 "github.com/google/cadvisor/info/v2"
|
||||
@@ -84,6 +85,10 @@ func (h hostStatsProvider) getPodEtcHostsStats(podUID types.UID, rootFsInfo *cad
|
||||
if !isEtcHostsSupported {
|
||||
return nil, nil
|
||||
}
|
||||
// Some pods have an explicit /etc/hosts mount and the Kubelet will not create an etc-hosts file for them
|
||||
if _, err := os.Stat(podEtcHostsPath); os.IsNotExist(err) {
|
||||
return nil, nil
|
||||
}
|
||||
|
||||
metrics := volume.NewMetricsDu(podEtcHostsPath)
|
||||
hostMetrics, err := metrics.GetMetrics()
|
||||
|
||||
3
vendor/k8s.io/kubernetes/pkg/volume/csi/csi_mounter.go
generated
vendored
3
vendor/k8s.io/kubernetes/pkg/volume/csi/csi_mounter.go
generated
vendored
@@ -262,7 +262,8 @@ func (c *csiMountMgr) SetUpAt(dir string, mounterArgs volume.MounterArgs) error
|
||||
|
||||
c.supportsSELinux, err = c.kubeVolHost.GetHostUtil().GetSELinuxSupport(dir)
|
||||
if err != nil {
|
||||
klog.V(2).Info(log("error checking for SELinux support: %s", err))
|
||||
// The volume is mounted. Return UncertainProgressError, so kubelet will unmount it when user deletes the pod.
|
||||
return volumetypes.NewUncertainProgressError(fmt.Sprintf("error checking for SELinux support: %s", err))
|
||||
}
|
||||
|
||||
if c.supportsFSGroup(fsType, mounterArgs.FsGroup, c.fsGroupPolicy) {
|
||||
|
||||
14
vendor/k8s.io/kubernetes/pkg/volume/iscsi/iscsi.go
generated
vendored
14
vendor/k8s.io/kubernetes/pkg/volume/iscsi/iscsi.go
generated
vendored
@@ -27,6 +27,7 @@ import (
|
||||
"k8s.io/klog/v2"
|
||||
"k8s.io/mount-utils"
|
||||
utilexec "k8s.io/utils/exec"
|
||||
"k8s.io/utils/io"
|
||||
"k8s.io/utils/keymutex"
|
||||
utilstrings "k8s.io/utils/strings"
|
||||
|
||||
@@ -34,6 +35,7 @@ import (
|
||||
metav1 "k8s.io/apimachinery/pkg/apis/meta/v1"
|
||||
"k8s.io/apimachinery/pkg/types"
|
||||
"k8s.io/kubernetes/pkg/volume"
|
||||
"k8s.io/kubernetes/pkg/volume/util"
|
||||
ioutil "k8s.io/kubernetes/pkg/volume/util"
|
||||
"k8s.io/kubernetes/pkg/volume/util/volumepathhandler"
|
||||
)
|
||||
@@ -210,10 +212,20 @@ func (plugin *iscsiPlugin) ConstructVolumeSpec(volumeName, mountPath string) (*v
|
||||
// Find globalPDPath from pod volume directory(mountPath)
|
||||
var globalPDPath string
|
||||
mounter := plugin.host.GetMounter(plugin.GetPluginName())
|
||||
paths, err := mounter.GetMountRefs(mountPath)
|
||||
// Try really hard to get the global mount of the volume, an error returned from here would
|
||||
// leave the global mount still mounted, while marking the volume as unused.
|
||||
// The volume can then be mounted on several nodes, resulting in volume
|
||||
// corruption.
|
||||
paths, err := util.GetReliableMountRefs(mounter, mountPath)
|
||||
if io.IsInconsistentReadError(err) {
|
||||
klog.Errorf("Failed to read mount refs from /proc/mounts for %s: %s", mountPath, err)
|
||||
klog.Errorf("Kubelet cannot unmount volume at %s, please unmount it and all mounts of the same device manually.", mountPath)
|
||||
return nil, err
|
||||
}
|
||||
if err != nil {
|
||||
return nil, err
|
||||
}
|
||||
|
||||
for _, path := range paths {
|
||||
if strings.Contains(path, plugin.host.GetPluginDir(iscsiPluginName)) {
|
||||
globalPDPath = path
|
||||
|
||||
2
vendor/k8s.io/kubernetes/pkg/volume/util/hostutil/fake_hostutil.go
generated
vendored
2
vendor/k8s.io/kubernetes/pkg/volume/util/hostutil/fake_hostutil.go
generated
vendored
@@ -108,7 +108,7 @@ func (hu *FakeHostUtil) GetOwner(pathname string) (int64, int64, error) {
|
||||
// GetSELinuxSupport tests if pathname is on a mount that supports SELinux.
|
||||
// Not implemented for testing
|
||||
func (hu *FakeHostUtil) GetSELinuxSupport(pathname string) (bool, error) {
|
||||
return false, errors.New("GetSELinuxSupport not implemented")
|
||||
return false, nil
|
||||
}
|
||||
|
||||
// GetMode returns permissions of pathname.
|
||||
|
||||
13
vendor/k8s.io/kubernetes/pkg/volume/util/hostutil/hostutil_linux.go
generated
vendored
13
vendor/k8s.io/kubernetes/pkg/volume/util/hostutil/hostutil_linux.go
generated
vendored
@@ -28,6 +28,7 @@ import (
|
||||
|
||||
"golang.org/x/sys/unix"
|
||||
"k8s.io/klog/v2"
|
||||
"k8s.io/kubernetes/pkg/util/selinux"
|
||||
"k8s.io/mount-utils"
|
||||
utilpath "k8s.io/utils/path"
|
||||
)
|
||||
@@ -229,8 +230,16 @@ func DoMakeRShared(path string, mountInfoFilename string) error {
|
||||
return nil
|
||||
}
|
||||
|
||||
// selinux.SELinuxEnabled implementation for unit tests
|
||||
type seLinuxEnabledFunc func() bool
|
||||
|
||||
// GetSELinux is common implementation of GetSELinuxSupport on Linux.
|
||||
func GetSELinux(path string, mountInfoFilename string) (bool, error) {
|
||||
func GetSELinux(path string, mountInfoFilename string, selinuxEnabled seLinuxEnabledFunc) (bool, error) {
|
||||
// Skip /proc/mounts parsing if SELinux is disabled.
|
||||
if !selinuxEnabled() {
|
||||
return false, nil
|
||||
}
|
||||
|
||||
info, err := findMountInfo(path, mountInfoFilename)
|
||||
if err != nil {
|
||||
return false, err
|
||||
@@ -253,7 +262,7 @@ func GetSELinux(path string, mountInfoFilename string) (bool, error) {
|
||||
// GetSELinuxSupport returns true if given path is on a mount that supports
|
||||
// SELinux.
|
||||
func (hu *HostUtil) GetSELinuxSupport(pathname string) (bool, error) {
|
||||
return GetSELinux(pathname, procMountInfoPath)
|
||||
return GetSELinux(pathname, procMountInfoPath, selinux.SELinuxEnabled)
|
||||
}
|
||||
|
||||
// GetOwner returns the integer ID for the user and group of the given path
|
||||
|
||||
@@ -28,7 +28,7 @@ import (
|
||||
"fmt"
|
||||
"sync"
|
||||
|
||||
"k8s.io/api/core/v1"
|
||||
v1 "k8s.io/api/core/v1"
|
||||
"k8s.io/apimachinery/pkg/types"
|
||||
k8sRuntime "k8s.io/apimachinery/pkg/util/runtime"
|
||||
"k8s.io/klog/v2"
|
||||
@@ -106,6 +106,13 @@ type NestedPendingOperations interface {
|
||||
volumeName v1.UniqueVolumeName,
|
||||
podName volumetypes.UniquePodName,
|
||||
nodeName types.NodeName) bool
|
||||
|
||||
// IsOperationSafeToRetry returns false if an operation for the given volumeName
|
||||
// and one of podName or nodeName is pending or in exponential backoff, otherwise it returns true
|
||||
IsOperationSafeToRetry(
|
||||
volumeName v1.UniqueVolumeName,
|
||||
podName volumetypes.UniquePodName,
|
||||
nodeName types.NodeName, operationName string) bool
|
||||
}
|
||||
|
||||
// NewNestedPendingOperations returns a new instance of NestedPendingOperations.
|
||||
@@ -185,6 +192,33 @@ func (grm *nestedPendingOperations) Run(
|
||||
|
||||
return nil
|
||||
}
|
||||
func (grm *nestedPendingOperations) IsOperationSafeToRetry(
|
||||
volumeName v1.UniqueVolumeName,
|
||||
podName volumetypes.UniquePodName,
|
||||
nodeName types.NodeName,
|
||||
operationName string) bool {
|
||||
|
||||
grm.lock.RLock()
|
||||
defer grm.lock.RUnlock()
|
||||
|
||||
opKey := operationKey{volumeName, podName, nodeName}
|
||||
exist, previousOpIndex := grm.isOperationExists(opKey)
|
||||
if !exist {
|
||||
return true
|
||||
}
|
||||
previousOp := grm.operations[previousOpIndex]
|
||||
if previousOp.operationPending {
|
||||
return false
|
||||
}
|
||||
backOffErr := previousOp.expBackoff.SafeToRetry(fmt.Sprintf("%+v", opKey))
|
||||
if backOffErr != nil {
|
||||
if previousOp.operationName == operationName {
|
||||
return false
|
||||
}
|
||||
}
|
||||
|
||||
return true
|
||||
}
|
||||
|
||||
func (grm *nestedPendingOperations) IsOperationPending(
|
||||
volumeName v1.UniqueVolumeName,
|
||||
|
||||
11
vendor/k8s.io/kubernetes/pkg/volume/util/operationexecutor/operation_executor.go
generated
vendored
11
vendor/k8s.io/kubernetes/pkg/volume/util/operationexecutor/operation_executor.go
generated
vendored
@@ -141,6 +141,9 @@ type OperationExecutor interface {
|
||||
// IsOperationPending returns true if an operation for the given volumeName
|
||||
// and one of podName or nodeName is pending, otherwise it returns false
|
||||
IsOperationPending(volumeName v1.UniqueVolumeName, podName volumetypes.UniquePodName, nodeName types.NodeName) bool
|
||||
// IsOperationSafeToRetry returns false if an operation for the given volumeName
|
||||
// and one of podName or nodeName is pending or in exponential backoff, otherwise it returns true
|
||||
IsOperationSafeToRetry(volumeName v1.UniqueVolumeName, podName volumetypes.UniquePodName, nodeName types.NodeName, operationName string) bool
|
||||
// ExpandInUseVolume will resize volume's file system to expected size without unmounting the volume.
|
||||
ExpandInUseVolume(volumeToMount VolumeToMount, actualStateOfWorld ActualStateOfWorldMounterUpdater) error
|
||||
// ReconstructVolumeOperation construct a new volumeSpec and returns it created by plugin
|
||||
@@ -661,6 +664,14 @@ func (oe *operationExecutor) IsOperationPending(
|
||||
return oe.pendingOperations.IsOperationPending(volumeName, podName, nodeName)
|
||||
}
|
||||
|
||||
func (oe *operationExecutor) IsOperationSafeToRetry(
|
||||
volumeName v1.UniqueVolumeName,
|
||||
podName volumetypes.UniquePodName,
|
||||
nodeName types.NodeName,
|
||||
operationName string) bool {
|
||||
return oe.pendingOperations.IsOperationSafeToRetry(volumeName, podName, nodeName, operationName)
|
||||
}
|
||||
|
||||
func (oe *operationExecutor) AttachVolume(
|
||||
volumeToAttach VolumeToAttach,
|
||||
actualStateOfWorld ActualStateOfWorldAttacherUpdater) error {
|
||||
|
||||
5
vendor/k8s.io/kubernetes/pkg/volume/util/operationexecutor/operation_generator.go
generated
vendored
5
vendor/k8s.io/kubernetes/pkg/volume/util/operationexecutor/operation_generator.go
generated
vendored
@@ -47,6 +47,7 @@ import (
|
||||
const (
|
||||
unknownVolumePlugin string = "UnknownVolumePlugin"
|
||||
unknownAttachableVolumePlugin string = "UnknownAttachableVolumePlugin"
|
||||
DetachOperationName string = "volume_detach"
|
||||
)
|
||||
|
||||
// InTreeToCSITranslator contains methods required to check migratable status
|
||||
@@ -490,9 +491,9 @@ func (og *operationGenerator) GenerateDetachVolumeFunc(
|
||||
}
|
||||
|
||||
return volumetypes.GeneratedOperations{
|
||||
OperationName: "volume_detach",
|
||||
OperationName: DetachOperationName,
|
||||
OperationFunc: detachVolumeFunc,
|
||||
CompleteFunc: util.OperationCompleteHook(util.GetFullQualifiedPluginNameForVolume(pluginName, volumeToDetach.VolumeSpec), "volume_detach"),
|
||||
CompleteFunc: util.OperationCompleteHook(util.GetFullQualifiedPluginNameForVolume(pluginName, volumeToDetach.VolumeSpec), DetachOperationName),
|
||||
EventRecorderFunc: nil, // nil because we do not want to generate event on error
|
||||
}, nil
|
||||
}
|
||||
|
||||
26
vendor/k8s.io/kubernetes/pkg/volume/util/subpath/subpath_linux.go
generated
vendored
26
vendor/k8s.io/kubernetes/pkg/volume/util/subpath/subpath_linux.go
generated
vendored
@@ -29,7 +29,6 @@ import (
|
||||
|
||||
"golang.org/x/sys/unix"
|
||||
"k8s.io/klog/v2"
|
||||
"k8s.io/kubernetes/pkg/volume/util/hostutil"
|
||||
"k8s.io/mount-utils"
|
||||
)
|
||||
|
||||
@@ -109,12 +108,12 @@ func prepareSubpathTarget(mounter mount.Interface, subpath Subpath) (bool, strin
|
||||
notMount = true
|
||||
}
|
||||
if !notMount {
|
||||
linuxHostUtil := hostutil.NewHostUtil()
|
||||
mntInfo, err := linuxHostUtil.FindMountInfo(bindPathTarget)
|
||||
// It's already mounted, so check if it's bind-mounted to the same path
|
||||
samePath, err := checkSubPathFileEqual(subpath, bindPathTarget)
|
||||
if err != nil {
|
||||
return false, "", fmt.Errorf("error calling findMountInfo for %s: %s", bindPathTarget, err)
|
||||
return false, "", fmt.Errorf("error checking subpath mount info for %s: %s", bindPathTarget, err)
|
||||
}
|
||||
if mntInfo.Root != subpath.Path {
|
||||
if !samePath {
|
||||
// It's already mounted but not what we want, unmount it
|
||||
if err = mounter.Unmount(bindPathTarget); err != nil {
|
||||
return false, "", fmt.Errorf("error ummounting %s: %s", bindPathTarget, err)
|
||||
@@ -155,6 +154,23 @@ func prepareSubpathTarget(mounter mount.Interface, subpath Subpath) (bool, strin
|
||||
return false, bindPathTarget, nil
|
||||
}
|
||||
|
||||
func checkSubPathFileEqual(subpath Subpath, bindMountTarget string) (bool, error) {
|
||||
s, err := os.Lstat(subpath.Path)
|
||||
if err != nil {
|
||||
return false, fmt.Errorf("stat %s failed: %s", subpath.Path, err)
|
||||
}
|
||||
|
||||
t, err := os.Lstat(bindMountTarget)
|
||||
if err != nil {
|
||||
return false, fmt.Errorf("lstat %s failed: %s", bindMountTarget, err)
|
||||
}
|
||||
|
||||
if !os.SameFile(s, t) {
|
||||
return false, nil
|
||||
}
|
||||
return true, nil
|
||||
}
|
||||
|
||||
func getSubpathBindTarget(subpath Subpath) string {
|
||||
// containerName is DNS label, i.e. safe as a directory name.
|
||||
return filepath.Join(subpath.PodDir, containerSubPathDirectoryName, subpath.VolumeName, subpath.ContainerName, strconv.Itoa(subpath.VolumeMountIndex))
|
||||
|
||||
40
vendor/k8s.io/kubernetes/pkg/volume/util/util.go
generated
vendored
40
vendor/k8s.io/kubernetes/pkg/volume/util/util.go
generated
vendored
@@ -20,18 +20,12 @@ import (
|
||||
"context"
|
||||
"fmt"
|
||||
"io/ioutil"
|
||||
storagehelpers "k8s.io/component-helpers/storage/volume"
|
||||
"os"
|
||||
"path/filepath"
|
||||
"reflect"
|
||||
"runtime"
|
||||
"strings"
|
||||
|
||||
"k8s.io/component-helpers/scheduling/corev1"
|
||||
"k8s.io/klog/v2"
|
||||
"k8s.io/mount-utils"
|
||||
utilexec "k8s.io/utils/exec"
|
||||
utilstrings "k8s.io/utils/strings"
|
||||
"time"
|
||||
|
||||
v1 "k8s.io/api/core/v1"
|
||||
storage "k8s.io/api/storage/v1"
|
||||
@@ -40,13 +34,21 @@ import (
|
||||
apiruntime "k8s.io/apimachinery/pkg/runtime"
|
||||
utypes "k8s.io/apimachinery/pkg/types"
|
||||
"k8s.io/apimachinery/pkg/util/sets"
|
||||
"k8s.io/apimachinery/pkg/util/wait"
|
||||
clientset "k8s.io/client-go/kubernetes"
|
||||
"k8s.io/component-helpers/scheduling/corev1"
|
||||
storagehelpers "k8s.io/component-helpers/storage/volume"
|
||||
"k8s.io/klog/v2"
|
||||
"k8s.io/kubernetes/pkg/api/legacyscheme"
|
||||
podutil "k8s.io/kubernetes/pkg/api/v1/pod"
|
||||
"k8s.io/kubernetes/pkg/securitycontext"
|
||||
"k8s.io/kubernetes/pkg/volume"
|
||||
"k8s.io/kubernetes/pkg/volume/util/types"
|
||||
"k8s.io/kubernetes/pkg/volume/util/volumepathhandler"
|
||||
"k8s.io/mount-utils"
|
||||
utilexec "k8s.io/utils/exec"
|
||||
"k8s.io/utils/io"
|
||||
utilstrings "k8s.io/utils/strings"
|
||||
)
|
||||
|
||||
const (
|
||||
@@ -732,3 +734,27 @@ func IsDeviceMountableVolume(volumeSpec *volume.Spec, volumePluginMgr *volume.Vo
|
||||
|
||||
return false
|
||||
}
|
||||
|
||||
// GetReliableMountRefs calls mounter.GetMountRefs and retries on IsInconsistentReadError.
|
||||
// To be used in volume reconstruction of volume plugins that don't have any protection
|
||||
// against mounting a single volume on multiple nodes (such as attach/detach).
|
||||
func GetReliableMountRefs(mounter mount.Interface, mountPath string) ([]string, error) {
|
||||
var paths []string
|
||||
var lastErr error
|
||||
err := wait.PollImmediate(10*time.Millisecond, time.Minute, func() (bool, error) {
|
||||
var err error
|
||||
paths, err = mounter.GetMountRefs(mountPath)
|
||||
if io.IsInconsistentReadError(err) {
|
||||
lastErr = err
|
||||
return false, nil
|
||||
}
|
||||
if err != nil {
|
||||
return false, err
|
||||
}
|
||||
return true, nil
|
||||
})
|
||||
if err == wait.ErrWaitTimeout {
|
||||
return nil, lastErr
|
||||
}
|
||||
return paths, err
|
||||
}
|
||||
|
||||
2
vendor/k8s.io/mount-utils/go.mod
generated
vendored
2
vendor/k8s.io/mount-utils/go.mod
generated
vendored
@@ -10,7 +10,7 @@ require (
|
||||
github.com/stretchr/testify v1.6.1
|
||||
gopkg.in/check.v1 v1.0.0-20200227125254-8fa46927fb4f // indirect
|
||||
k8s.io/klog/v2 v2.9.0
|
||||
k8s.io/utils v0.0.0-20201110183641-67b214c5f920
|
||||
k8s.io/utils v0.0.0-20210521133846-da695404a2bc
|
||||
)
|
||||
|
||||
replace k8s.io/mount-utils => ../mount-utils
|
||||
|
||||
4
vendor/k8s.io/mount-utils/go.sum
generated
vendored
4
vendor/k8s.io/mount-utils/go.sum
generated
vendored
@@ -27,5 +27,5 @@ gopkg.in/yaml.v3 v3.0.0-20200313102051-9f266ea9e77c/go.mod h1:K4uyk7z7BCEPqu6E+C
|
||||
k8s.io/klog/v2 v2.0.0/go.mod h1:PBfzABfn139FHAV07az/IF9Wp1bkk3vpT2XSJ76fSDE=
|
||||
k8s.io/klog/v2 v2.9.0 h1:D7HV+n1V57XeZ0m6tdRkfknthUaM06VFbWldOFh8kzM=
|
||||
k8s.io/klog/v2 v2.9.0/go.mod h1:hy9LJ/NvuK+iVyP4Ehqva4HxZG/oXyIS3n3Jmire4Ec=
|
||||
k8s.io/utils v0.0.0-20201110183641-67b214c5f920 h1:CbnUZsM497iRC5QMVkHwyl8s2tB3g7yaSHkYPkpgelw=
|
||||
k8s.io/utils v0.0.0-20201110183641-67b214c5f920/go.mod h1:jPW/WVKK9YHAvNhRxK0md/EJ228hCsBRufyofKtW8HA=
|
||||
k8s.io/utils v0.0.0-20210521133846-da695404a2bc h1:dx6VGe+PnOW/kD/2UV4aUSsRfJGd7+lcqgJ6Xg0HwUs=
|
||||
k8s.io/utils v0.0.0-20210521133846-da695404a2bc/go.mod h1:jPW/WVKK9YHAvNhRxK0md/EJ228hCsBRufyofKtW8HA=
|
||||
|
||||
2
vendor/k8s.io/mount-utils/mount_helper_unix.go
generated
vendored
2
vendor/k8s.io/mount-utils/mount_helper_unix.go
generated
vendored
@@ -32,7 +32,7 @@ const (
|
||||
// At least number of fields per line in /proc/<pid>/mountinfo.
|
||||
expectedAtLeastNumFieldsPerMountInfo = 10
|
||||
// How many times to retry for a consistent read of /proc/mounts.
|
||||
maxListTries = 3
|
||||
maxListTries = 10
|
||||
)
|
||||
|
||||
// IsCorruptedMnt return true if err is about corrupted mount point
|
||||
|
||||
10
vendor/k8s.io/mount-utils/mount_helper_windows.go
generated
vendored
10
vendor/k8s.io/mount-utils/mount_helper_windows.go
generated
vendored
@@ -84,15 +84,9 @@ func NormalizeWindowsPath(path string) string {
|
||||
|
||||
// ValidateDiskNumber : disk number should be a number in [0, 99]
|
||||
func ValidateDiskNumber(disk string) error {
|
||||
diskNum, err := strconv.Atoi(disk)
|
||||
if err != nil {
|
||||
return fmt.Errorf("wrong disk number format: %q, err:%v", disk, err)
|
||||
if _, err := strconv.Atoi(disk); err != nil {
|
||||
return fmt.Errorf("wrong disk number format: %q, err: %v", disk, err)
|
||||
}
|
||||
|
||||
if diskNum < 0 || diskNum > 99 {
|
||||
return fmt.Errorf("disk number out of range: %q", disk)
|
||||
}
|
||||
|
||||
return nil
|
||||
}
|
||||
|
||||
|
||||
26
vendor/k8s.io/utils/io/read.go
generated
vendored
26
vendor/k8s.io/utils/io/read.go
generated
vendored
@@ -30,6 +30,9 @@ var ErrLimitReached = errors.New("the read limit is reached")
|
||||
// ConsistentRead repeatedly reads a file until it gets the same content twice.
|
||||
// This is useful when reading files in /proc that are larger than page size
|
||||
// and kernel may modify them between individual read() syscalls.
|
||||
// It returns InconsistentReadError when it cannot get a consistent read in
|
||||
// given nr. of attempts. Caller should retry, kernel is probably under heavy
|
||||
// mount/unmount load.
|
||||
func ConsistentRead(filename string, attempts int) ([]byte, error) {
|
||||
return consistentReadSync(filename, attempts, nil)
|
||||
}
|
||||
@@ -56,7 +59,28 @@ func consistentReadSync(filename string, attempts int, sync func(int)) ([]byte,
|
||||
// Files are different, continue reading
|
||||
oldContent = newContent
|
||||
}
|
||||
return nil, fmt.Errorf("could not get consistent content of %s after %d attempts", filename, attempts)
|
||||
return nil, InconsistentReadError{filename, attempts}
|
||||
}
|
||||
|
||||
// InconsistentReadError is returned from ConsistentRead when it cannot get
|
||||
// a consistent read in given nr. of attempts. Caller should retry, kernel is
|
||||
// probably under heavy mount/unmount load.
|
||||
type InconsistentReadError struct {
|
||||
filename string
|
||||
attempts int
|
||||
}
|
||||
|
||||
func (i InconsistentReadError) Error() string {
|
||||
return fmt.Sprintf("could not get consistent content of %s after %d attempts", i.filename, i.attempts)
|
||||
}
|
||||
|
||||
var _ error = InconsistentReadError{}
|
||||
|
||||
func IsInconsistentReadError(err error) bool {
|
||||
if _, ok := err.(InconsistentReadError); ok {
|
||||
return true
|
||||
}
|
||||
return false
|
||||
}
|
||||
|
||||
// ReadAtMost reads up to `limit` bytes from `r`, and reports an error
|
||||
|
||||
11
vendor/k8s.io/utils/mount/README.md
generated
vendored
Normal file
11
vendor/k8s.io/utils/mount/README.md
generated
vendored
Normal file
@@ -0,0 +1,11 @@
|
||||
# WARNING ! Please read before using mount functionality
|
||||
# THIS REPOSITORY is moved : Please use https://github.com/kubernetes/mount-utils for all your work
|
||||
|
||||
This package has been moved to new location. Please use the new repo for bug fixes and enhancements.
|
||||
All existing dependencies on this repo are being removed. Eventually this repo will be deprecated.
|
||||
If you are using this repo or planning to use, you must use the new repo mentioned here for this functionality.
|
||||
|
||||
New repo : https://github.com/kubernetes/mount-utils
|
||||
New go module: k8s.io/mount-utils
|
||||
For Kubernetes/Kubernetes project the code is available under staging directory.
|
||||
|
||||
156
vendor/k8s.io/utils/pointer/pointer.go
generated
vendored
156
vendor/k8s.io/utils/pointer/pointer.go
generated
vendored
@@ -46,86 +46,182 @@ func AllPtrFieldsNil(obj interface{}) bool {
|
||||
return true
|
||||
}
|
||||
|
||||
// Int32Ptr returns a pointer to an int32
|
||||
func Int32Ptr(i int32) *int32 {
|
||||
// Int32 returns a pointer to an int32.
|
||||
func Int32(i int32) *int32 {
|
||||
return &i
|
||||
}
|
||||
|
||||
// Int32PtrDerefOr dereference the int32 ptr and returns it if not nil,
|
||||
// else returns def.
|
||||
func Int32PtrDerefOr(ptr *int32, def int32) int32 {
|
||||
var Int32Ptr = Int32 // for back-compat
|
||||
|
||||
// Int32Deref dereferences the int32 ptr and returns it if not nil, or else
|
||||
// returns def.
|
||||
func Int32Deref(ptr *int32, def int32) int32 {
|
||||
if ptr != nil {
|
||||
return *ptr
|
||||
}
|
||||
return def
|
||||
}
|
||||
|
||||
// Int64Ptr returns a pointer to an int64
|
||||
func Int64Ptr(i int64) *int64 {
|
||||
var Int32PtrDerefOr = Int32Deref // for back-compat
|
||||
|
||||
// Int32Equal returns true if both arguments are nil or both arguments
|
||||
// dereference to the same value.
|
||||
func Int32Equal(a, b *int32) bool {
|
||||
if (a == nil) != (b == nil) {
|
||||
return false
|
||||
}
|
||||
if a == nil {
|
||||
return true
|
||||
}
|
||||
return *a == *b
|
||||
}
|
||||
|
||||
// Int64 returns a pointer to an int64.
|
||||
func Int64(i int64) *int64 {
|
||||
return &i
|
||||
}
|
||||
|
||||
// Int64PtrDerefOr dereference the int64 ptr and returns it if not nil,
|
||||
// else returns def.
|
||||
func Int64PtrDerefOr(ptr *int64, def int64) int64 {
|
||||
var Int64Ptr = Int64 // for back-compat
|
||||
|
||||
// Int64Deref dereferences the int64 ptr and returns it if not nil, or else
|
||||
// returns def.
|
||||
func Int64Deref(ptr *int64, def int64) int64 {
|
||||
if ptr != nil {
|
||||
return *ptr
|
||||
}
|
||||
return def
|
||||
}
|
||||
|
||||
// BoolPtr returns a pointer to a bool
|
||||
func BoolPtr(b bool) *bool {
|
||||
var Int64PtrDerefOr = Int64Deref // for back-compat
|
||||
|
||||
// Int64Equal returns true if both arguments are nil or both arguments
|
||||
// dereference to the same value.
|
||||
func Int64Equal(a, b *int64) bool {
|
||||
if (a == nil) != (b == nil) {
|
||||
return false
|
||||
}
|
||||
if a == nil {
|
||||
return true
|
||||
}
|
||||
return *a == *b
|
||||
}
|
||||
|
||||
// Bool returns a pointer to a bool.
|
||||
func Bool(b bool) *bool {
|
||||
return &b
|
||||
}
|
||||
|
||||
// BoolPtrDerefOr dereference the bool ptr and returns it if not nil,
|
||||
// else returns def.
|
||||
func BoolPtrDerefOr(ptr *bool, def bool) bool {
|
||||
var BoolPtr = Bool // for back-compat
|
||||
|
||||
// BoolDeref dereferences the bool ptr and returns it if not nil, or else
|
||||
// returns def.
|
||||
func BoolDeref(ptr *bool, def bool) bool {
|
||||
if ptr != nil {
|
||||
return *ptr
|
||||
}
|
||||
return def
|
||||
}
|
||||
|
||||
// StringPtr returns a pointer to the passed string.
|
||||
func StringPtr(s string) *string {
|
||||
var BoolPtrDerefOr = BoolDeref // for back-compat
|
||||
|
||||
// BoolEqual returns true if both arguments are nil or both arguments
|
||||
// dereference to the same value.
|
||||
func BoolEqual(a, b *bool) bool {
|
||||
if (a == nil) != (b == nil) {
|
||||
return false
|
||||
}
|
||||
if a == nil {
|
||||
return true
|
||||
}
|
||||
return *a == *b
|
||||
}
|
||||
|
||||
// String returns a pointer to a string.
|
||||
func String(s string) *string {
|
||||
return &s
|
||||
}
|
||||
|
||||
// StringPtrDerefOr dereference the string ptr and returns it if not nil,
|
||||
// else returns def.
|
||||
func StringPtrDerefOr(ptr *string, def string) string {
|
||||
var StringPtr = String // for back-compat
|
||||
|
||||
// StringDeref dereferences the string ptr and returns it if not nil, or else
|
||||
// returns def.
|
||||
func StringDeref(ptr *string, def string) string {
|
||||
if ptr != nil {
|
||||
return *ptr
|
||||
}
|
||||
return def
|
||||
}
|
||||
|
||||
// Float32Ptr returns a pointer to the passed float32.
|
||||
func Float32Ptr(i float32) *float32 {
|
||||
var StringPtrDerefOr = StringDeref // for back-compat
|
||||
|
||||
// StringEqual returns true if both arguments are nil or both arguments
|
||||
// dereference to the same value.
|
||||
func StringEqual(a, b *string) bool {
|
||||
if (a == nil) != (b == nil) {
|
||||
return false
|
||||
}
|
||||
if a == nil {
|
||||
return true
|
||||
}
|
||||
return *a == *b
|
||||
}
|
||||
|
||||
// Float32 returns a pointer to the a float32.
|
||||
func Float32(i float32) *float32 {
|
||||
return &i
|
||||
}
|
||||
|
||||
// Float32PtrDerefOr dereference the float32 ptr and returns it if not nil,
|
||||
// else returns def.
|
||||
func Float32PtrDerefOr(ptr *float32, def float32) float32 {
|
||||
var Float32Ptr = Float32
|
||||
|
||||
// Float32Deref dereferences the float32 ptr and returns it if not nil, or else
|
||||
// returns def.
|
||||
func Float32Deref(ptr *float32, def float32) float32 {
|
||||
if ptr != nil {
|
||||
return *ptr
|
||||
}
|
||||
return def
|
||||
}
|
||||
|
||||
// Float64Ptr returns a pointer to the passed float64.
|
||||
func Float64Ptr(i float64) *float64 {
|
||||
var Float32PtrDerefOr = Float32Deref // for back-compat
|
||||
|
||||
// Float32Equal returns true if both arguments are nil or both arguments
|
||||
// dereference to the same value.
|
||||
func Float32Equal(a, b *float32) bool {
|
||||
if (a == nil) != (b == nil) {
|
||||
return false
|
||||
}
|
||||
if a == nil {
|
||||
return true
|
||||
}
|
||||
return *a == *b
|
||||
}
|
||||
|
||||
// Float64 returns a pointer to the a float64.
|
||||
func Float64(i float64) *float64 {
|
||||
return &i
|
||||
}
|
||||
|
||||
// Float64PtrDerefOr dereference the float64 ptr and returns it if not nil,
|
||||
// else returns def.
|
||||
func Float64PtrDerefOr(ptr *float64, def float64) float64 {
|
||||
var Float64Ptr = Float64
|
||||
|
||||
// Float64Deref dereferences the float64 ptr and returns it if not nil, or else
|
||||
// returns def.
|
||||
func Float64Deref(ptr *float64, def float64) float64 {
|
||||
if ptr != nil {
|
||||
return *ptr
|
||||
}
|
||||
return def
|
||||
}
|
||||
|
||||
var Float64PtrDerefOr = Float64Deref // for back-compat
|
||||
|
||||
// Float64Equal returns true if both arguments are nil or both arguments
|
||||
// dereference to the same value.
|
||||
func Float64Equal(a, b *float64) bool {
|
||||
if (a == nil) != (b == nil) {
|
||||
return false
|
||||
}
|
||||
if a == nil {
|
||||
return true
|
||||
}
|
||||
return *a == *b
|
||||
}
|
||||
|
||||
108
vendor/modules.txt
vendored
108
vendor/modules.txt
vendored
@@ -1533,7 +1533,7 @@ gopkg.in/yaml.v3
|
||||
# inet.af/tcpproxy v0.0.0-20200125044825-b6bb9b5b8252
|
||||
## explicit
|
||||
inet.af/tcpproxy
|
||||
# k8s.io/api v0.21.6 => github.com/k3s-io/kubernetes/staging/src/k8s.io/api v1.21.6-k3s1
|
||||
# k8s.io/api v0.21.7 => github.com/k3s-io/kubernetes/staging/src/k8s.io/api v1.21.7-k3s1
|
||||
## explicit
|
||||
k8s.io/api/admission/v1
|
||||
k8s.io/api/admission/v1beta1
|
||||
@@ -1581,7 +1581,7 @@ k8s.io/api/scheduling/v1beta1
|
||||
k8s.io/api/storage/v1
|
||||
k8s.io/api/storage/v1alpha1
|
||||
k8s.io/api/storage/v1beta1
|
||||
# k8s.io/apiextensions-apiserver v0.18.0 => github.com/k3s-io/kubernetes/staging/src/k8s.io/apiextensions-apiserver v1.21.6-k3s1
|
||||
# k8s.io/apiextensions-apiserver v0.18.0 => github.com/k3s-io/kubernetes/staging/src/k8s.io/apiextensions-apiserver v1.21.7-k3s1
|
||||
k8s.io/apiextensions-apiserver/pkg/apihelpers
|
||||
k8s.io/apiextensions-apiserver/pkg/apis/apiextensions
|
||||
k8s.io/apiextensions-apiserver/pkg/apis/apiextensions/install
|
||||
@@ -1621,7 +1621,7 @@ k8s.io/apiextensions-apiserver/pkg/generated/openapi
|
||||
k8s.io/apiextensions-apiserver/pkg/registry/customresource
|
||||
k8s.io/apiextensions-apiserver/pkg/registry/customresource/tableconvertor
|
||||
k8s.io/apiextensions-apiserver/pkg/registry/customresourcedefinition
|
||||
# k8s.io/apimachinery v0.21.6 => github.com/k3s-io/kubernetes/staging/src/k8s.io/apimachinery v1.21.6-k3s1
|
||||
# k8s.io/apimachinery v0.21.7 => github.com/k3s-io/kubernetes/staging/src/k8s.io/apimachinery v1.21.7-k3s1
|
||||
## explicit
|
||||
k8s.io/apimachinery/pkg/api/equality
|
||||
k8s.io/apimachinery/pkg/api/errors
|
||||
@@ -1686,7 +1686,7 @@ k8s.io/apimachinery/pkg/watch
|
||||
k8s.io/apimachinery/third_party/forked/golang/json
|
||||
k8s.io/apimachinery/third_party/forked/golang/netutil
|
||||
k8s.io/apimachinery/third_party/forked/golang/reflect
|
||||
# k8s.io/apiserver v0.21.6 => github.com/k3s-io/kubernetes/staging/src/k8s.io/apiserver v1.21.6-k3s1
|
||||
# k8s.io/apiserver v0.21.7 => github.com/k3s-io/kubernetes/staging/src/k8s.io/apiserver v1.21.7-k3s1
|
||||
## explicit
|
||||
k8s.io/apiserver/pkg/admission
|
||||
k8s.io/apiserver/pkg/admission/configuration
|
||||
@@ -1825,11 +1825,11 @@ k8s.io/apiserver/plugin/pkg/audit/webhook
|
||||
k8s.io/apiserver/plugin/pkg/authenticator/token/oidc
|
||||
k8s.io/apiserver/plugin/pkg/authenticator/token/webhook
|
||||
k8s.io/apiserver/plugin/pkg/authorizer/webhook
|
||||
# k8s.io/cli-runtime v0.17.2 => github.com/k3s-io/kubernetes/staging/src/k8s.io/cli-runtime v1.21.6-k3s1
|
||||
# k8s.io/cli-runtime v0.17.2 => github.com/k3s-io/kubernetes/staging/src/k8s.io/cli-runtime v1.21.7-k3s1
|
||||
k8s.io/cli-runtime/pkg/genericclioptions
|
||||
k8s.io/cli-runtime/pkg/printers
|
||||
k8s.io/cli-runtime/pkg/resource
|
||||
# k8s.io/client-go v11.0.1-0.20190409021438-1a26190bd76a+incompatible => github.com/k3s-io/kubernetes/staging/src/k8s.io/client-go v1.21.6-k3s1
|
||||
# k8s.io/client-go v11.0.1-0.20190409021438-1a26190bd76a+incompatible => github.com/k3s-io/kubernetes/staging/src/k8s.io/client-go v1.21.7-k3s1
|
||||
## explicit
|
||||
k8s.io/client-go/applyconfigurations/admissionregistration/v1
|
||||
k8s.io/client-go/applyconfigurations/admissionregistration/v1beta1
|
||||
@@ -2117,7 +2117,7 @@ k8s.io/client-go/util/jsonpath
|
||||
k8s.io/client-go/util/keyutil
|
||||
k8s.io/client-go/util/retry
|
||||
k8s.io/client-go/util/workqueue
|
||||
# k8s.io/cloud-provider v0.21.6 => github.com/k3s-io/kubernetes/staging/src/k8s.io/cloud-provider v1.21.6-k3s1
|
||||
# k8s.io/cloud-provider v0.21.7 => github.com/k3s-io/kubernetes/staging/src/k8s.io/cloud-provider v1.21.7-k3s1
|
||||
## explicit
|
||||
k8s.io/cloud-provider
|
||||
k8s.io/cloud-provider/api
|
||||
@@ -2139,13 +2139,13 @@ k8s.io/cloud-provider/service/helpers
|
||||
k8s.io/cloud-provider/volume
|
||||
k8s.io/cloud-provider/volume/errors
|
||||
k8s.io/cloud-provider/volume/helpers
|
||||
# k8s.io/cluster-bootstrap v0.0.0 => github.com/k3s-io/kubernetes/staging/src/k8s.io/cluster-bootstrap v1.21.6-k3s1
|
||||
# k8s.io/cluster-bootstrap v0.0.0 => github.com/k3s-io/kubernetes/staging/src/k8s.io/cluster-bootstrap v1.21.7-k3s1
|
||||
k8s.io/cluster-bootstrap/token/api
|
||||
k8s.io/cluster-bootstrap/token/jws
|
||||
k8s.io/cluster-bootstrap/token/util
|
||||
k8s.io/cluster-bootstrap/util/secrets
|
||||
k8s.io/cluster-bootstrap/util/tokens
|
||||
# k8s.io/code-generator v0.19.7 => github.com/k3s-io/kubernetes/staging/src/k8s.io/code-generator v1.21.6-k3s1
|
||||
# k8s.io/code-generator v0.19.7 => github.com/k3s-io/kubernetes/staging/src/k8s.io/code-generator v1.21.7-k3s1
|
||||
k8s.io/code-generator/cmd/client-gen/args
|
||||
k8s.io/code-generator/cmd/client-gen/generators
|
||||
k8s.io/code-generator/cmd/client-gen/generators/fake
|
||||
@@ -2160,7 +2160,7 @@ k8s.io/code-generator/cmd/lister-gen/args
|
||||
k8s.io/code-generator/cmd/lister-gen/generators
|
||||
k8s.io/code-generator/pkg/namer
|
||||
k8s.io/code-generator/pkg/util
|
||||
# k8s.io/component-base v0.21.6 => github.com/k3s-io/kubernetes/staging/src/k8s.io/component-base v1.21.6-k3s1
|
||||
# k8s.io/component-base v0.21.7 => github.com/k3s-io/kubernetes/staging/src/k8s.io/component-base v1.21.7-k3s1
|
||||
## explicit
|
||||
k8s.io/component-base/cli/flag
|
||||
k8s.io/component-base/cli/globalflag
|
||||
@@ -2186,7 +2186,7 @@ k8s.io/component-base/metrics/testutil
|
||||
k8s.io/component-base/term
|
||||
k8s.io/component-base/version
|
||||
k8s.io/component-base/version/verflag
|
||||
# k8s.io/component-helpers v0.0.0 => github.com/k3s-io/kubernetes/staging/src/k8s.io/component-helpers v1.21.6-k3s1
|
||||
# k8s.io/component-helpers v0.0.0 => github.com/k3s-io/kubernetes/staging/src/k8s.io/component-helpers v1.21.7-k3s1
|
||||
k8s.io/component-helpers/apimachinery/lease
|
||||
k8s.io/component-helpers/apps/poddisruptionbudget
|
||||
k8s.io/component-helpers/auth/rbac/reconciliation
|
||||
@@ -2195,7 +2195,7 @@ k8s.io/component-helpers/node/topology
|
||||
k8s.io/component-helpers/scheduling/corev1
|
||||
k8s.io/component-helpers/scheduling/corev1/nodeaffinity
|
||||
k8s.io/component-helpers/storage/volume
|
||||
# k8s.io/controller-manager v0.21.6 => github.com/k3s-io/kubernetes/staging/src/k8s.io/controller-manager v1.21.6-k3s1
|
||||
# k8s.io/controller-manager v0.21.7 => github.com/k3s-io/kubernetes/staging/src/k8s.io/controller-manager v1.21.7-k3s1
|
||||
## explicit
|
||||
k8s.io/controller-manager/app
|
||||
k8s.io/controller-manager/config
|
||||
@@ -2208,11 +2208,11 @@ k8s.io/controller-manager/pkg/informerfactory
|
||||
k8s.io/controller-manager/pkg/leadermigration
|
||||
k8s.io/controller-manager/pkg/leadermigration/config
|
||||
k8s.io/controller-manager/pkg/leadermigration/options
|
||||
# k8s.io/cri-api v0.21.6 => github.com/k3s-io/kubernetes/staging/src/k8s.io/cri-api v1.21.6-k3s1
|
||||
# k8s.io/cri-api v0.21.7 => github.com/k3s-io/kubernetes/staging/src/k8s.io/cri-api v1.21.7-k3s1
|
||||
## explicit
|
||||
k8s.io/cri-api/pkg/apis
|
||||
k8s.io/cri-api/pkg/apis/runtime/v1alpha2
|
||||
# k8s.io/csi-translation-lib v0.0.0 => github.com/k3s-io/kubernetes/staging/src/k8s.io/csi-translation-lib v1.21.6-k3s1
|
||||
# k8s.io/csi-translation-lib v0.0.0 => github.com/k3s-io/kubernetes/staging/src/k8s.io/csi-translation-lib v1.21.7-k3s1
|
||||
k8s.io/csi-translation-lib
|
||||
k8s.io/csi-translation-lib/plugins
|
||||
# k8s.io/gengo v0.0.0-20201214224949-b6c5ce23f027
|
||||
@@ -2231,7 +2231,7 @@ k8s.io/klog
|
||||
# k8s.io/klog/v2 v2.9.0 => github.com/k3s-io/klog/v2 v2.9.0-k3s2
|
||||
## explicit
|
||||
k8s.io/klog/v2
|
||||
# k8s.io/kube-aggregator v0.18.0 => github.com/k3s-io/kubernetes/staging/src/k8s.io/kube-aggregator v1.21.6-k3s1
|
||||
# k8s.io/kube-aggregator v0.18.0 => github.com/k3s-io/kubernetes/staging/src/k8s.io/kube-aggregator v1.21.7-k3s1
|
||||
k8s.io/kube-aggregator/pkg/apis/apiregistration
|
||||
k8s.io/kube-aggregator/pkg/apis/apiregistration/install
|
||||
k8s.io/kube-aggregator/pkg/apis/apiregistration/v1
|
||||
@@ -2259,9 +2259,9 @@ k8s.io/kube-aggregator/pkg/controllers/status
|
||||
k8s.io/kube-aggregator/pkg/registry/apiservice
|
||||
k8s.io/kube-aggregator/pkg/registry/apiservice/etcd
|
||||
k8s.io/kube-aggregator/pkg/registry/apiservice/rest
|
||||
# k8s.io/kube-controller-manager v0.0.0 => github.com/k3s-io/kubernetes/staging/src/k8s.io/kube-controller-manager v1.21.6-k3s1
|
||||
# k8s.io/kube-controller-manager v0.0.0 => github.com/k3s-io/kubernetes/staging/src/k8s.io/kube-controller-manager v1.21.7-k3s1
|
||||
k8s.io/kube-controller-manager/config/v1alpha1
|
||||
# k8s.io/kube-openapi v0.0.0-20210305001622-591a79e4bda7
|
||||
# k8s.io/kube-openapi v0.0.0-20211110012726-3cc51fd1e909
|
||||
k8s.io/kube-openapi/pkg/aggregator
|
||||
k8s.io/kube-openapi/pkg/builder
|
||||
k8s.io/kube-openapi/pkg/common
|
||||
@@ -2275,13 +2275,13 @@ k8s.io/kube-openapi/pkg/validation/spec
|
||||
k8s.io/kube-openapi/pkg/validation/strfmt
|
||||
k8s.io/kube-openapi/pkg/validation/strfmt/bson
|
||||
k8s.io/kube-openapi/pkg/validation/validate
|
||||
# k8s.io/kube-proxy v0.0.0 => github.com/k3s-io/kubernetes/staging/src/k8s.io/kube-proxy v1.21.6-k3s1
|
||||
# k8s.io/kube-proxy v0.0.0 => github.com/k3s-io/kubernetes/staging/src/k8s.io/kube-proxy v1.21.7-k3s1
|
||||
k8s.io/kube-proxy/config/v1alpha1
|
||||
# k8s.io/kube-scheduler v0.0.0 => github.com/k3s-io/kubernetes/staging/src/k8s.io/kube-scheduler v1.21.6-k3s1
|
||||
# k8s.io/kube-scheduler v0.0.0 => github.com/k3s-io/kubernetes/staging/src/k8s.io/kube-scheduler v1.21.7-k3s1
|
||||
k8s.io/kube-scheduler/config/v1
|
||||
k8s.io/kube-scheduler/config/v1beta1
|
||||
k8s.io/kube-scheduler/extender/v1
|
||||
# k8s.io/kubectl v0.21.6 => github.com/k3s-io/kubernetes/staging/src/k8s.io/kubectl v1.21.6-k3s1
|
||||
# k8s.io/kubectl v0.21.7 => github.com/k3s-io/kubernetes/staging/src/k8s.io/kubectl v1.21.7-k3s1
|
||||
## explicit
|
||||
k8s.io/kubectl/pkg/apps
|
||||
k8s.io/kubectl/pkg/cmd
|
||||
@@ -2360,7 +2360,7 @@ k8s.io/kubectl/pkg/util/storage
|
||||
k8s.io/kubectl/pkg/util/templates
|
||||
k8s.io/kubectl/pkg/util/term
|
||||
k8s.io/kubectl/pkg/validation
|
||||
# k8s.io/kubelet v0.0.0 => github.com/k3s-io/kubernetes/staging/src/k8s.io/kubelet v1.21.6-k3s1
|
||||
# k8s.io/kubelet v0.0.0 => github.com/k3s-io/kubernetes/staging/src/k8s.io/kubelet v1.21.7-k3s1
|
||||
k8s.io/kubelet/config/v1alpha1
|
||||
k8s.io/kubelet/config/v1beta1
|
||||
k8s.io/kubelet/pkg/apis
|
||||
@@ -2372,7 +2372,7 @@ k8s.io/kubelet/pkg/apis/pluginregistration/v1
|
||||
k8s.io/kubelet/pkg/apis/podresources/v1
|
||||
k8s.io/kubelet/pkg/apis/podresources/v1alpha1
|
||||
k8s.io/kubelet/pkg/apis/stats/v1alpha1
|
||||
# k8s.io/kubernetes v1.21.6 => github.com/k3s-io/kubernetes v1.21.6-k3s1
|
||||
# k8s.io/kubernetes v1.21.7 => github.com/k3s-io/kubernetes v1.21.7-k3s1
|
||||
## explicit
|
||||
k8s.io/kubernetes/cmd/kube-apiserver/app
|
||||
k8s.io/kubernetes/cmd/kube-apiserver/app/options
|
||||
@@ -3100,7 +3100,7 @@ k8s.io/kubernetes/third_party/forked/gonum/graph
|
||||
k8s.io/kubernetes/third_party/forked/gonum/graph/internal/linear
|
||||
k8s.io/kubernetes/third_party/forked/gonum/graph/simple
|
||||
k8s.io/kubernetes/third_party/forked/gonum/graph/traverse
|
||||
# k8s.io/legacy-cloud-providers v0.0.0 => github.com/k3s-io/kubernetes/staging/src/k8s.io/legacy-cloud-providers v1.21.6-k3s1
|
||||
# k8s.io/legacy-cloud-providers v0.0.0 => github.com/k3s-io/kubernetes/staging/src/k8s.io/legacy-cloud-providers v1.21.7-k3s1
|
||||
k8s.io/legacy-cloud-providers/aws
|
||||
k8s.io/legacy-cloud-providers/azure
|
||||
k8s.io/legacy-cloud-providers/azure/auth
|
||||
@@ -3143,7 +3143,7 @@ k8s.io/legacy-cloud-providers/openstack
|
||||
k8s.io/legacy-cloud-providers/vsphere
|
||||
k8s.io/legacy-cloud-providers/vsphere/vclib
|
||||
k8s.io/legacy-cloud-providers/vsphere/vclib/diskmanagers
|
||||
# k8s.io/metrics v0.0.0 => github.com/k3s-io/kubernetes/staging/src/k8s.io/metrics v1.21.6-k3s1
|
||||
# k8s.io/metrics v0.0.0 => github.com/k3s-io/kubernetes/staging/src/k8s.io/metrics v1.21.7-k3s1
|
||||
k8s.io/metrics/pkg/apis/custom_metrics
|
||||
k8s.io/metrics/pkg/apis/custom_metrics/v1beta1
|
||||
k8s.io/metrics/pkg/apis/custom_metrics/v1beta2
|
||||
@@ -3159,9 +3159,9 @@ k8s.io/metrics/pkg/client/clientset/versioned/typed/metrics/v1beta1
|
||||
k8s.io/metrics/pkg/client/custom_metrics
|
||||
k8s.io/metrics/pkg/client/custom_metrics/scheme
|
||||
k8s.io/metrics/pkg/client/external_metrics
|
||||
# k8s.io/mount-utils v0.0.0 => github.com/k3s-io/kubernetes/staging/src/k8s.io/mount-utils v1.21.6-k3s1
|
||||
# k8s.io/mount-utils v0.0.0 => github.com/k3s-io/kubernetes/staging/src/k8s.io/mount-utils v1.21.7-k3s1
|
||||
k8s.io/mount-utils
|
||||
# k8s.io/utils v0.0.0-20201110183641-67b214c5f920
|
||||
# k8s.io/utils v0.0.0-20210521133846-da695404a2bc
|
||||
## explicit
|
||||
k8s.io/utils/buffer
|
||||
k8s.io/utils/clock
|
||||
@@ -3298,34 +3298,34 @@ sigs.k8s.io/yaml
|
||||
# google.golang.org/genproto => google.golang.org/genproto v0.0.0-20200513103714-09dca8ec2884
|
||||
# google.golang.org/grpc => google.golang.org/grpc v1.27.1
|
||||
# gopkg.in/square/go-jose.v2 => gopkg.in/square/go-jose.v2 v2.2.2
|
||||
# k8s.io/api => github.com/k3s-io/kubernetes/staging/src/k8s.io/api v1.21.6-k3s1
|
||||
# k8s.io/apiextensions-apiserver => github.com/k3s-io/kubernetes/staging/src/k8s.io/apiextensions-apiserver v1.21.6-k3s1
|
||||
# k8s.io/apimachinery => github.com/k3s-io/kubernetes/staging/src/k8s.io/apimachinery v1.21.6-k3s1
|
||||
# k8s.io/apiserver => github.com/k3s-io/kubernetes/staging/src/k8s.io/apiserver v1.21.6-k3s1
|
||||
# k8s.io/cli-runtime => github.com/k3s-io/kubernetes/staging/src/k8s.io/cli-runtime v1.21.6-k3s1
|
||||
# k8s.io/client-go => github.com/k3s-io/kubernetes/staging/src/k8s.io/client-go v1.21.6-k3s1
|
||||
# k8s.io/cloud-provider => github.com/k3s-io/kubernetes/staging/src/k8s.io/cloud-provider v1.21.6-k3s1
|
||||
# k8s.io/cluster-bootstrap => github.com/k3s-io/kubernetes/staging/src/k8s.io/cluster-bootstrap v1.21.6-k3s1
|
||||
# k8s.io/code-generator => github.com/k3s-io/kubernetes/staging/src/k8s.io/code-generator v1.21.6-k3s1
|
||||
# k8s.io/component-base => github.com/k3s-io/kubernetes/staging/src/k8s.io/component-base v1.21.6-k3s1
|
||||
# k8s.io/component-helpers => github.com/k3s-io/kubernetes/staging/src/k8s.io/component-helpers v1.21.6-k3s1
|
||||
# k8s.io/controller-manager => github.com/k3s-io/kubernetes/staging/src/k8s.io/controller-manager v1.21.6-k3s1
|
||||
# k8s.io/cri-api => github.com/k3s-io/kubernetes/staging/src/k8s.io/cri-api v1.21.6-k3s1
|
||||
# k8s.io/csi-translation-lib => github.com/k3s-io/kubernetes/staging/src/k8s.io/csi-translation-lib v1.21.6-k3s1
|
||||
# k8s.io/api => github.com/k3s-io/kubernetes/staging/src/k8s.io/api v1.21.7-k3s1
|
||||
# k8s.io/apiextensions-apiserver => github.com/k3s-io/kubernetes/staging/src/k8s.io/apiextensions-apiserver v1.21.7-k3s1
|
||||
# k8s.io/apimachinery => github.com/k3s-io/kubernetes/staging/src/k8s.io/apimachinery v1.21.7-k3s1
|
||||
# k8s.io/apiserver => github.com/k3s-io/kubernetes/staging/src/k8s.io/apiserver v1.21.7-k3s1
|
||||
# k8s.io/cli-runtime => github.com/k3s-io/kubernetes/staging/src/k8s.io/cli-runtime v1.21.7-k3s1
|
||||
# k8s.io/client-go => github.com/k3s-io/kubernetes/staging/src/k8s.io/client-go v1.21.7-k3s1
|
||||
# k8s.io/cloud-provider => github.com/k3s-io/kubernetes/staging/src/k8s.io/cloud-provider v1.21.7-k3s1
|
||||
# k8s.io/cluster-bootstrap => github.com/k3s-io/kubernetes/staging/src/k8s.io/cluster-bootstrap v1.21.7-k3s1
|
||||
# k8s.io/code-generator => github.com/k3s-io/kubernetes/staging/src/k8s.io/code-generator v1.21.7-k3s1
|
||||
# k8s.io/component-base => github.com/k3s-io/kubernetes/staging/src/k8s.io/component-base v1.21.7-k3s1
|
||||
# k8s.io/component-helpers => github.com/k3s-io/kubernetes/staging/src/k8s.io/component-helpers v1.21.7-k3s1
|
||||
# k8s.io/controller-manager => github.com/k3s-io/kubernetes/staging/src/k8s.io/controller-manager v1.21.7-k3s1
|
||||
# k8s.io/cri-api => github.com/k3s-io/kubernetes/staging/src/k8s.io/cri-api v1.21.7-k3s1
|
||||
# k8s.io/csi-translation-lib => github.com/k3s-io/kubernetes/staging/src/k8s.io/csi-translation-lib v1.21.7-k3s1
|
||||
# k8s.io/klog => github.com/k3s-io/klog v1.0.0-k3s2
|
||||
# k8s.io/klog/v2 => github.com/k3s-io/klog/v2 v2.9.0-k3s2
|
||||
# k8s.io/kube-aggregator => github.com/k3s-io/kubernetes/staging/src/k8s.io/kube-aggregator v1.21.6-k3s1
|
||||
# k8s.io/kube-controller-manager => github.com/k3s-io/kubernetes/staging/src/k8s.io/kube-controller-manager v1.21.6-k3s1
|
||||
# k8s.io/kube-proxy => github.com/k3s-io/kubernetes/staging/src/k8s.io/kube-proxy v1.21.6-k3s1
|
||||
# k8s.io/kube-scheduler => github.com/k3s-io/kubernetes/staging/src/k8s.io/kube-scheduler v1.21.6-k3s1
|
||||
# k8s.io/kubectl => github.com/k3s-io/kubernetes/staging/src/k8s.io/kubectl v1.21.6-k3s1
|
||||
# k8s.io/kubelet => github.com/k3s-io/kubernetes/staging/src/k8s.io/kubelet v1.21.6-k3s1
|
||||
# k8s.io/kubernetes => github.com/k3s-io/kubernetes v1.21.6-k3s1
|
||||
# k8s.io/legacy-cloud-providers => github.com/k3s-io/kubernetes/staging/src/k8s.io/legacy-cloud-providers v1.21.6-k3s1
|
||||
# k8s.io/metrics => github.com/k3s-io/kubernetes/staging/src/k8s.io/metrics v1.21.6-k3s1
|
||||
# k8s.io/mount-utils => github.com/k3s-io/kubernetes/staging/src/k8s.io/mount-utils v1.21.6-k3s1
|
||||
# k8s.io/node-api => github.com/k3s-io/kubernetes/staging/src/k8s.io/node-api v1.21.6-k3s1
|
||||
# k8s.io/sample-apiserver => github.com/k3s-io/kubernetes/staging/src/k8s.io/sample-apiserver v1.21.6-k3s1
|
||||
# k8s.io/sample-cli-plugin => github.com/k3s-io/kubernetes/staging/src/k8s.io/sample-cli-plugin v1.21.6-k3s1
|
||||
# k8s.io/sample-controller => github.com/k3s-io/kubernetes/staging/src/k8s.io/sample-controller v1.21.6-k3s1
|
||||
# k8s.io/kube-aggregator => github.com/k3s-io/kubernetes/staging/src/k8s.io/kube-aggregator v1.21.7-k3s1
|
||||
# k8s.io/kube-controller-manager => github.com/k3s-io/kubernetes/staging/src/k8s.io/kube-controller-manager v1.21.7-k3s1
|
||||
# k8s.io/kube-proxy => github.com/k3s-io/kubernetes/staging/src/k8s.io/kube-proxy v1.21.7-k3s1
|
||||
# k8s.io/kube-scheduler => github.com/k3s-io/kubernetes/staging/src/k8s.io/kube-scheduler v1.21.7-k3s1
|
||||
# k8s.io/kubectl => github.com/k3s-io/kubernetes/staging/src/k8s.io/kubectl v1.21.7-k3s1
|
||||
# k8s.io/kubelet => github.com/k3s-io/kubernetes/staging/src/k8s.io/kubelet v1.21.7-k3s1
|
||||
# k8s.io/kubernetes => github.com/k3s-io/kubernetes v1.21.7-k3s1
|
||||
# k8s.io/legacy-cloud-providers => github.com/k3s-io/kubernetes/staging/src/k8s.io/legacy-cloud-providers v1.21.7-k3s1
|
||||
# k8s.io/metrics => github.com/k3s-io/kubernetes/staging/src/k8s.io/metrics v1.21.7-k3s1
|
||||
# k8s.io/mount-utils => github.com/k3s-io/kubernetes/staging/src/k8s.io/mount-utils v1.21.7-k3s1
|
||||
# k8s.io/node-api => github.com/k3s-io/kubernetes/staging/src/k8s.io/node-api v1.21.7-k3s1
|
||||
# k8s.io/sample-apiserver => github.com/k3s-io/kubernetes/staging/src/k8s.io/sample-apiserver v1.21.7-k3s1
|
||||
# k8s.io/sample-cli-plugin => github.com/k3s-io/kubernetes/staging/src/k8s.io/sample-cli-plugin v1.21.7-k3s1
|
||||
# k8s.io/sample-controller => github.com/k3s-io/kubernetes/staging/src/k8s.io/sample-controller v1.21.7-k3s1
|
||||
# mvdan.cc/unparam => mvdan.cc/unparam v0.0.0-20210104141923-aac4ce9116a7
|
||||
|
||||
Reference in New Issue
Block a user