diff --git a/go.mod b/go.mod index 75580f8e1785..e5f8db9b29f3 100644 --- a/go.mod +++ b/go.mod @@ -36,34 +36,34 @@ 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/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/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/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 ) @@ -119,18 +119,18 @@ require ( golang.org/x/sys v0.0.0-20210426230700-d19ff857e887 google.golang.org/grpc v1.37.0 gopkg.in/yaml.v2 v2.4.0 - 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 ) diff --git a/go.sum b/go.sum index cc1ccaefaf96..f887cf9c7940 100644 --- a/go.sum +++ b/go.sum @@ -540,55 +540,55 @@ github.com/k3s-io/helm-controller v0.10.8 h1:O7zoqUBp3W+6+nRCUWNiAoQMzOX6xw9IsBD github.com/k3s-io/helm-controller v0.10.8/go.mod h1:nZP8FH3KZrNNUf5r+SwwiMR63HS6lxdHdpHijgPfF74= github.com/k3s-io/kine v0.6.2 h1:1aJTPfB8HG4exqMKFVE5H0z4bepF05tJHtYNXotWXa4= github.com/k3s-io/kine v0.6.2/go.mod h1:rzCs93+rQHZGOiewMd84PDrER92QeZ6eeHbWkfEy4+w= -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= @@ -1230,12 +1230,13 @@ k8s.io/klog/v2 v2.8.0/go.mod h1:hy9LJ/NvuK+iVyP4Ehqva4HxZG/oXyIS3n3Jmire4Ec= 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-20190502190224-411b2483e503/go.mod h1:iU+ZGYsNlvU9XKUSso6SQfKTCCw7lFduMZy26Mgr2Fw= -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-20190506122338-8fab8cb257d5/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= diff --git a/vendor/k8s.io/apiserver/pkg/server/httplog/httplog.go b/vendor/k8s.io/apiserver/pkg/server/httplog/httplog.go index 4cb5306672bc..12f697cbf5ce 100644 --- a/vendor/k8s.io/apiserver/pkg/server/httplog/httplog.go +++ b/vendor/k8s.io/apiserver/pkg/server/httplog/httplog.go @@ -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) } diff --git a/vendor/k8s.io/client-go/pkg/version/base.go b/vendor/k8s.io/client-go/pkg/version/base.go index 88ce4094bdb3..2f2c8e4c1ede 100644 --- a/vendor/k8s.io/client-go/pkg/version/base.go +++ b/vendor/k8s.io/client-go/pkg/version/base.go @@ -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" ) diff --git a/vendor/k8s.io/cloud-provider/controllers/service/controller.go b/vendor/k8s.io/cloud-provider/controllers/service/controller.go index c27ed512e1a8..e2271cceef24 100644 --- a/vendor/k8s.io/cloud-provider/controllers/service/controller.go +++ b/vendor/k8s.io/cloud-provider/controllers/service/controller.go @@ -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 diff --git a/vendor/k8s.io/cloud-provider/go.mod b/vendor/k8s.io/cloud-provider/go.mod index 97fe7c875749..c04c1d5e141a 100644 --- a/vendor/k8s.io/cloud-provider/go.mod +++ b/vendor/k8s.io/cloud-provider/go.mod @@ -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 ( diff --git a/vendor/k8s.io/cloud-provider/go.sum b/vendor/k8s.io/cloud-provider/go.sum index 76b152a42250..3f3eac2566c1 100644 --- a/vendor/k8s.io/cloud-provider/go.sum +++ b/vendor/k8s.io/cloud-provider/go.sum @@ -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= diff --git a/vendor/k8s.io/component-base/metrics/options.go b/vendor/k8s.io/component-base/metrics/options.go index 91a76ba7e51c..456fe0b0a302 100644 --- a/vendor/k8s.io/component-base/metrics/options.go +++ b/vendor/k8s.io/component-base/metrics/options.go @@ -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. "+ diff --git a/vendor/k8s.io/component-base/version/base.go b/vendor/k8s.io/component-base/version/base.go index 88ce4094bdb3..2f2c8e4c1ede 100644 --- a/vendor/k8s.io/component-base/version/base.go +++ b/vendor/k8s.io/component-base/version/base.go @@ -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" ) diff --git a/vendor/k8s.io/csi-translation-lib/go.sum b/vendor/k8s.io/csi-translation-lib/go.sum index c3f8d8926da1..f71aac274257 100644 --- a/vendor/k8s.io/csi-translation-lib/go.sum +++ b/vendor/k8s.io/csi-translation-lib/go.sum @@ -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= diff --git a/vendor/k8s.io/kube-openapi/pkg/handler/handler.go b/vendor/k8s.io/kube-openapi/pkg/handler/handler.go index 7cd1bbd0ff0a..24b99e87223e 100644 --- a/vendor/k8s.io/kube-openapi/pkg/handler/handler.go +++ b/vendor/k8s.io/kube-openapi/pkg/handler/handler.go @@ -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 +} + +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 +} - specBytesETag string - specPbETag string - specPbGzETag string +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 -} - -func (o *OpenAPIService) getSwaggerPbBytes() ([]byte, string, time.Time) { - o.rwMutex.RLock() - defer o.rwMutex.RUnlock() - return o.specPb, o.specPbETag, 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) getSwaggerPbGzBytes() ([]byte, string, time.Time) { +func (o *OpenAPIService) getSwaggerPbBytes() ([]byte, string, time.Time, error) { o.rwMutex.RLock() defer o.rwMutex.RUnlock() - return o.specPbGz, o.specPbGzETag, o.lastModified -} - -func (o *OpenAPIService) UpdateSpec(openapiSpec *spec.Swagger) (err error) { - specBytes, err := jsoniter.ConfigCompatibleWithStandardLibrary.Marshal(openapiSpec) + specPb, etag, err := o.protoCache.Get() if err != nil { - return err - } - var json map[string]interface{} - if err := jsoniter.ConfigCompatibleWithStandardLibrary.Unmarshal(specBytes, &json); err != nil { - return err + return nil, "", time.Time{}, 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() + return specPb, etag, o.lastModified, nil +} +func (o *OpenAPIService) UpdateSpec(openapiSpec *spec.Swagger) (err error) { 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)) diff --git a/vendor/k8s.io/kubectl/pkg/cmd/cp/cp.go b/vendor/k8s.io/kubectl/pkg/cmd/cp/cp.go index 9a3bea0c1a3a..64177526e7f4 100644 --- a/vendor/k8s.io/kubectl/pkg/cmd/cp/cp.go +++ b/vendor/k8s.io/kubectl/pkg/cmd/cp/cp.go @@ -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 /:/tmp/foo /tmp/bar`)) - - cpUsageStr = dedent.Dedent(` - expected 'cp [-c container]'. - 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) - // 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) -} - -// 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:] - } + srcFile := src.File.(remotePath) + destFile := dest.File.(localPath) - return newPath + // remove extraneous path shortcuts - these could occur if a path contained extra "../" + // and attempted to navigate beyond "/" in a remote filesystem + prefix := stripPathShortcuts(srcFile.StripSlashes().Clean().String()) + return o.untarAll(src.PodNamespace, src.PodName, prefix, srcFile, destFile, reader) } -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 diff --git a/vendor/k8s.io/kubectl/pkg/cmd/cp/filespec.go b/vendor/k8s.io/kubectl/pkg/cmd/cp/filespec.go new file mode 100644 index 000000000000..199bbeeed745 --- /dev/null +++ b/vendor/k8s.io/kubectl/pkg/cmd/cp/filespec.go @@ -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 +} diff --git a/vendor/k8s.io/kubectl/pkg/cmd/create/create_secret_docker.go b/vendor/k8s.io/kubectl/pkg/cmd/create/create_secret_docker.go index 40ac2ee363c4..3cea075d8fe3 100644 --- a/vendor/k8s.io/kubectl/pkg/cmd/create/create_secret_docker.go +++ b/vendor/k8s.io/kubectl/pkg/cmd/create/create_secret_docker.go @@ -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 { diff --git a/vendor/k8s.io/kubernetes/pkg/controller/endpointslicemirroring/endpointslicemirroring_controller.go b/vendor/k8s.io/kubernetes/pkg/controller/endpointslicemirroring/endpointslicemirroring_controller.go index 22f054b0fc30..92ad166c8c44 100644 --- a/vendor/k8s.io/kubernetes/pkg/controller/endpointslicemirroring/endpointslicemirroring_controller.go +++ b/vendor/k8s.io/kubernetes/pkg/controller/endpointslicemirroring/endpointslicemirroring_controller.go @@ -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) { diff --git a/vendor/k8s.io/kubernetes/pkg/controller/volume/attachdetach/cache/actual_state_of_world.go b/vendor/k8s.io/kubernetes/pkg/controller/volume/attachdetach/cache/actual_state_of_world.go index 9513d09a6034..4d420e01706b 100644 --- a/vendor/k8s.io/kubernetes/pkg/controller/volume/attachdetach/cache/actual_state_of_world.go +++ b/vendor/k8s.io/kubernetes/pkg/controller/volume/attachdetach/cache/actual_state_of_world.go @@ -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" diff --git a/vendor/k8s.io/kubernetes/pkg/controller/volume/attachdetach/reconciler/reconciler.go b/vendor/k8s.io/kubernetes/pkg/controller/volume/attachdetach/reconciler/reconciler.go index c3273013aeea..513916301856 100644 --- a/vendor/k8s.io/kubernetes/pkg/controller/volume/attachdetach/reconciler/reconciler.go +++ b/vendor/k8s.io/kubernetes/pkg/controller/volume/attachdetach/reconciler/reconciler.go @@ -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()) + } } } } diff --git a/vendor/k8s.io/kubernetes/pkg/controller/volume/pvcprotection/pvc_protection_controller.go b/vendor/k8s.io/kubernetes/pkg/controller/volume/pvcprotection/pvc_protection_controller.go index ae9bf18aa832..ea07adbfb9ce 100644 --- a/vendor/k8s.io/kubernetes/pkg/controller/volume/pvcprotection/pvc_protection_controller.go +++ b/vendor/k8s.io/kubernetes/pkg/controller/volume/pvcprotection/pvc_protection_controller.go @@ -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) diff --git a/vendor/k8s.io/kubernetes/pkg/kubelet/kuberuntime/logs/logs.go b/vendor/k8s.io/kubernetes/pkg/kubelet/kuberuntime/logs/logs.go index 428cc2eb65bb..9fcb151d647d 100644 --- a/vendor/k8s.io/kubernetes/pkg/kubelet/kuberuntime/logs/logs.go +++ b/vendor/k8s.io/kubernetes/pkg/kubelet/kuberuntime/logs/logs.go @@ -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()) diff --git a/vendor/k8s.io/kubernetes/pkg/kubelet/stats/host_stats_provider.go b/vendor/k8s.io/kubernetes/pkg/kubelet/stats/host_stats_provider.go index 108fbfb8f142..450b832bff5a 100644 --- a/vendor/k8s.io/kubernetes/pkg/kubelet/stats/host_stats_provider.go +++ b/vendor/k8s.io/kubernetes/pkg/kubelet/stats/host_stats_provider.go @@ -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() diff --git a/vendor/k8s.io/kubernetes/pkg/volume/csi/csi_mounter.go b/vendor/k8s.io/kubernetes/pkg/volume/csi/csi_mounter.go index d632ffd1433b..6d2f056cb48a 100644 --- a/vendor/k8s.io/kubernetes/pkg/volume/csi/csi_mounter.go +++ b/vendor/k8s.io/kubernetes/pkg/volume/csi/csi_mounter.go @@ -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) { diff --git a/vendor/k8s.io/kubernetes/pkg/volume/iscsi/iscsi.go b/vendor/k8s.io/kubernetes/pkg/volume/iscsi/iscsi.go index 8017c2d0d1e9..5bfbe608fb64 100644 --- a/vendor/k8s.io/kubernetes/pkg/volume/iscsi/iscsi.go +++ b/vendor/k8s.io/kubernetes/pkg/volume/iscsi/iscsi.go @@ -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 diff --git a/vendor/k8s.io/kubernetes/pkg/volume/util/hostutil/fake_hostutil.go b/vendor/k8s.io/kubernetes/pkg/volume/util/hostutil/fake_hostutil.go index cc5fe628af65..36b72e5e8ecf 100644 --- a/vendor/k8s.io/kubernetes/pkg/volume/util/hostutil/fake_hostutil.go +++ b/vendor/k8s.io/kubernetes/pkg/volume/util/hostutil/fake_hostutil.go @@ -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. diff --git a/vendor/k8s.io/kubernetes/pkg/volume/util/hostutil/hostutil_linux.go b/vendor/k8s.io/kubernetes/pkg/volume/util/hostutil/hostutil_linux.go index 160d22c28ad8..ab1c523358bf 100644 --- a/vendor/k8s.io/kubernetes/pkg/volume/util/hostutil/hostutil_linux.go +++ b/vendor/k8s.io/kubernetes/pkg/volume/util/hostutil/hostutil_linux.go @@ -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 diff --git a/vendor/k8s.io/kubernetes/pkg/volume/util/nestedpendingoperations/nestedpendingoperations.go b/vendor/k8s.io/kubernetes/pkg/volume/util/nestedpendingoperations/nestedpendingoperations.go index 652ed1c76d60..aded86aa21aa 100644 --- a/vendor/k8s.io/kubernetes/pkg/volume/util/nestedpendingoperations/nestedpendingoperations.go +++ b/vendor/k8s.io/kubernetes/pkg/volume/util/nestedpendingoperations/nestedpendingoperations.go @@ -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, diff --git a/vendor/k8s.io/kubernetes/pkg/volume/util/operationexecutor/operation_executor.go b/vendor/k8s.io/kubernetes/pkg/volume/util/operationexecutor/operation_executor.go index 11359ce18b59..efe3e506f5fa 100644 --- a/vendor/k8s.io/kubernetes/pkg/volume/util/operationexecutor/operation_executor.go +++ b/vendor/k8s.io/kubernetes/pkg/volume/util/operationexecutor/operation_executor.go @@ -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 { diff --git a/vendor/k8s.io/kubernetes/pkg/volume/util/operationexecutor/operation_generator.go b/vendor/k8s.io/kubernetes/pkg/volume/util/operationexecutor/operation_generator.go index 48ba1076e0da..8d2e92ed4543 100644 --- a/vendor/k8s.io/kubernetes/pkg/volume/util/operationexecutor/operation_generator.go +++ b/vendor/k8s.io/kubernetes/pkg/volume/util/operationexecutor/operation_generator.go @@ -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 } diff --git a/vendor/k8s.io/kubernetes/pkg/volume/util/subpath/subpath_linux.go b/vendor/k8s.io/kubernetes/pkg/volume/util/subpath/subpath_linux.go index 84cdf5e10514..263bd8f9d09e 100644 --- a/vendor/k8s.io/kubernetes/pkg/volume/util/subpath/subpath_linux.go +++ b/vendor/k8s.io/kubernetes/pkg/volume/util/subpath/subpath_linux.go @@ -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)) diff --git a/vendor/k8s.io/kubernetes/pkg/volume/util/util.go b/vendor/k8s.io/kubernetes/pkg/volume/util/util.go index fdc7bfb1b049..864bef6a8a81 100644 --- a/vendor/k8s.io/kubernetes/pkg/volume/util/util.go +++ b/vendor/k8s.io/kubernetes/pkg/volume/util/util.go @@ -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 +} diff --git a/vendor/k8s.io/mount-utils/go.mod b/vendor/k8s.io/mount-utils/go.mod index f0f5b29f170e..659d5ac5f6ad 100644 --- a/vendor/k8s.io/mount-utils/go.mod +++ b/vendor/k8s.io/mount-utils/go.mod @@ -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 diff --git a/vendor/k8s.io/mount-utils/go.sum b/vendor/k8s.io/mount-utils/go.sum index d11c68eb1af1..902424d7934e 100644 --- a/vendor/k8s.io/mount-utils/go.sum +++ b/vendor/k8s.io/mount-utils/go.sum @@ -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= diff --git a/vendor/k8s.io/mount-utils/mount_helper_unix.go b/vendor/k8s.io/mount-utils/mount_helper_unix.go index 2c14a27c7192..f3658647eea2 100644 --- a/vendor/k8s.io/mount-utils/mount_helper_unix.go +++ b/vendor/k8s.io/mount-utils/mount_helper_unix.go @@ -32,7 +32,7 @@ const ( // At least number of fields per line in /proc//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 diff --git a/vendor/k8s.io/mount-utils/mount_helper_windows.go b/vendor/k8s.io/mount-utils/mount_helper_windows.go index 865ab5c3243f..2dbbc73e9c05 100644 --- a/vendor/k8s.io/mount-utils/mount_helper_windows.go +++ b/vendor/k8s.io/mount-utils/mount_helper_windows.go @@ -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 } diff --git a/vendor/k8s.io/utils/io/read.go b/vendor/k8s.io/utils/io/read.go index 16a638d764bf..f0af3c8ec8a3 100644 --- a/vendor/k8s.io/utils/io/read.go +++ b/vendor/k8s.io/utils/io/read.go @@ -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 diff --git a/vendor/k8s.io/utils/mount/README.md b/vendor/k8s.io/utils/mount/README.md new file mode 100644 index 000000000000..e66b5c27a041 --- /dev/null +++ b/vendor/k8s.io/utils/mount/README.md @@ -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. + diff --git a/vendor/k8s.io/utils/pointer/pointer.go b/vendor/k8s.io/utils/pointer/pointer.go index 0a55a844ee71..1da6f6664a3d 100644 --- a/vendor/k8s.io/utils/pointer/pointer.go +++ b/vendor/k8s.io/utils/pointer/pointer.go @@ -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 +} diff --git a/vendor/modules.txt b/vendor/modules.txt index d4ae3f1a0771..d19ebd7f15df 100644 --- a/vendor/modules.txt +++ b/vendor/modules.txt @@ -1456,7 +1456,7 @@ gopkg.in/warnings.v0 gopkg.in/yaml.v2 # gopkg.in/yaml.v3 v3.0.0-20210107192922-496545a6307b gopkg.in/yaml.v3 -# 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 @@ -1504,7 +1504,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 @@ -1544,7 +1544,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 @@ -1609,7 +1609,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 @@ -1748,11 +1748,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.0.0 => github.com/k3s-io/kubernetes/staging/src/k8s.io/cli-runtime v1.21.6-k3s1 +# k8s.io/cli-runtime v0.0.0 => 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 @@ -2040,7 +2040,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 @@ -2062,13 +2062,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 @@ -2083,7 +2083,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 @@ -2109,7 +2109,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 @@ -2118,7 +2118,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 @@ -2131,11 +2131,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 @@ -2154,7 +2154,7 @@ k8s.io/klog # k8s.io/klog/v2 v2.9.0 ## 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 @@ -2182,9 +2182,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 @@ -2198,13 +2198,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 @@ -2283,7 +2283,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 @@ -2295,7 +2295,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 @@ -3023,7 +3023,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 @@ -3066,7 +3066,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 @@ -3082,9 +3082,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 @@ -3221,32 +3221,32 @@ 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/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/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/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