From d340dc53d6e309e98b613e3ed1e47edaea2637f6 Mon Sep 17 00:00:00 2001 From: Andrew Kim Date: Tue, 29 Jan 2019 14:47:48 -0500 Subject: [PATCH 1/3] update vendor k8s.io/utils to ed37f7428a91fc2a81070808937195dcd46d320e --- Godeps/Godeps.json | 22 +- Godeps/LICENSES | 210 ++++++++++++++++++ .../Godeps/Godeps.json | 6 +- .../src/k8s.io/apiserver/Godeps/Godeps.json | 8 +- .../src/k8s.io/cli-runtime/Godeps/Godeps.json | 2 +- .../src/k8s.io/client-go/Godeps/Godeps.json | 6 +- .../k8s.io/cloud-provider/Godeps/Godeps.json | 6 +- .../k8s.io/component-base/Godeps/Godeps.json | 2 +- staging/src/k8s.io/csi-api/Godeps/Godeps.json | 6 +- .../k8s.io/kube-aggregator/Godeps/Godeps.json | 6 +- .../Godeps/Godeps.json | 2 +- .../src/k8s.io/kube-proxy/Godeps/Godeps.json | 2 +- .../k8s.io/kube-scheduler/Godeps/Godeps.json | 2 +- staging/src/k8s.io/metrics/Godeps/Godeps.json | 2 +- .../src/k8s.io/node-api/Godeps/Godeps.json | 6 +- .../sample-apiserver/Godeps/Godeps.json | 6 +- .../sample-cli-plugin/Godeps/Godeps.json | 2 +- .../sample-controller/Godeps/Godeps.json | 6 +- vendor/BUILD | 1 + vendor/k8s.io/utils/nsenter/BUILD | 2 - vendor/k8s.io/utils/nsenter/exec.go | 67 ------ .../k8s.io/utils/nsenter/exec_unsupported.go | 58 ----- vendor/k8s.io/utils/nsenter/nsenter.go | 57 +++-- .../utils/nsenter/nsenter_unsupported.go | 35 ++- vendor/k8s.io/utils/path/BUILD | 23 ++ vendor/k8s.io/utils/path/file.go | 78 +++++++ 26 files changed, 429 insertions(+), 194 deletions(-) delete mode 100644 vendor/k8s.io/utils/nsenter/exec.go delete mode 100644 vendor/k8s.io/utils/nsenter/exec_unsupported.go create mode 100644 vendor/k8s.io/utils/path/BUILD create mode 100644 vendor/k8s.io/utils/path/file.go diff --git a/Godeps/Godeps.json b/Godeps/Godeps.json index 0febbc8e82..441f4354cb 100644 --- a/Godeps/Godeps.json +++ b/Godeps/Godeps.json @@ -4090,39 +4090,43 @@ }, { "ImportPath": "k8s.io/utils/buffer", - "Rev": "8a87304934321b4b0ad72a7cb3cbc715d67d38c7" + "Rev": "ed37f7428a91fc2a81070808937195dcd46d320e" }, { "ImportPath": "k8s.io/utils/clock", - "Rev": "8a87304934321b4b0ad72a7cb3cbc715d67d38c7" + "Rev": "ed37f7428a91fc2a81070808937195dcd46d320e" }, { "ImportPath": "k8s.io/utils/exec", - "Rev": "8a87304934321b4b0ad72a7cb3cbc715d67d38c7" + "Rev": "ed37f7428a91fc2a81070808937195dcd46d320e" }, { "ImportPath": "k8s.io/utils/exec/testing", - "Rev": "8a87304934321b4b0ad72a7cb3cbc715d67d38c7" + "Rev": "ed37f7428a91fc2a81070808937195dcd46d320e" }, { "ImportPath": "k8s.io/utils/integer", - "Rev": "8a87304934321b4b0ad72a7cb3cbc715d67d38c7" + "Rev": "ed37f7428a91fc2a81070808937195dcd46d320e" }, { "ImportPath": "k8s.io/utils/io", - "Rev": "8a87304934321b4b0ad72a7cb3cbc715d67d38c7" + "Rev": "ed37f7428a91fc2a81070808937195dcd46d320e" }, { "ImportPath": "k8s.io/utils/nsenter", - "Rev": "8a87304934321b4b0ad72a7cb3cbc715d67d38c7" + "Rev": "ed37f7428a91fc2a81070808937195dcd46d320e" + }, + { + "ImportPath": "k8s.io/utils/path", + "Rev": "ed37f7428a91fc2a81070808937195dcd46d320e" }, { "ImportPath": "k8s.io/utils/pointer", - "Rev": "8a87304934321b4b0ad72a7cb3cbc715d67d38c7" + "Rev": "ed37f7428a91fc2a81070808937195dcd46d320e" }, { "ImportPath": "k8s.io/utils/trace", - "Rev": "8a87304934321b4b0ad72a7cb3cbc715d67d38c7" + "Rev": "ed37f7428a91fc2a81070808937195dcd46d320e" }, { "ImportPath": "sigs.k8s.io/yaml", diff --git a/Godeps/LICENSES b/Godeps/LICENSES index 41628249ad..a8bec98bd7 100644 --- a/Godeps/LICENSES +++ b/Godeps/LICENSES @@ -116423,6 +116423,216 @@ third-party archives. ================================================================================ +================================================================================ += vendor/k8s.io/utils/path licensed under: = + + + Apache License + Version 2.0, January 2004 + http://www.apache.org/licenses/ + + TERMS AND CONDITIONS FOR USE, REPRODUCTION, AND DISTRIBUTION + + 1. Definitions. + + "License" shall mean the terms and conditions for use, reproduction, + and distribution as defined by Sections 1 through 9 of this document. + + "Licensor" shall mean the copyright owner or entity authorized by + the copyright owner that is granting the License. + + "Legal Entity" shall mean the union of the acting entity and all + other entities that control, are controlled by, or are under common + control with that entity. For the purposes of this definition, + "control" means (i) the power, direct or indirect, to cause the + direction or management of such entity, whether by contract or + otherwise, or (ii) ownership of fifty percent (50%) or more of the + outstanding shares, or (iii) beneficial ownership of such entity. + + "You" (or "Your") shall mean an individual or Legal Entity + exercising permissions granted by this License. + + "Source" form shall mean the preferred form for making modifications, + including but not limited to software source code, documentation + source, and configuration files. + + "Object" form shall mean any form resulting from mechanical + transformation or translation of a Source form, including but + not limited to compiled object code, generated documentation, + and conversions to other media types. + + "Work" shall mean the work of authorship, whether in Source or + Object form, made available under the License, as indicated by a + copyright notice that is included in or attached to the work + (an example is provided in the Appendix below). + + "Derivative Works" shall mean any work, whether in Source or Object + form, that is based on (or derived from) the Work and for which the + editorial revisions, annotations, elaborations, or other modifications + represent, as a whole, an original work of authorship. For the purposes + of this License, Derivative Works shall not include works that remain + separable from, or merely link (or bind by name) to the interfaces of, + the Work and Derivative Works thereof. + + "Contribution" shall mean any work of authorship, including + the original version of the Work and any modifications or additions + to that Work or Derivative Works thereof, that is intentionally + submitted to Licensor for inclusion in the Work by the copyright owner + or by an individual or Legal Entity authorized to submit on behalf of + the copyright owner. For the purposes of this definition, "submitted" + means any form of electronic, verbal, or written communication sent + to the Licensor or its representatives, including but not limited to + communication on electronic mailing lists, source code control systems, + and issue tracking systems that are managed by, or on behalf of, the + Licensor for the purpose of discussing and improving the Work, but + excluding communication that is conspicuously marked or otherwise + designated in writing by the copyright owner as "Not a Contribution." + + "Contributor" shall mean Licensor and any individual or Legal Entity + on behalf of whom a Contribution has been received by Licensor and + subsequently incorporated within the Work. + + 2. Grant of Copyright License. Subject to the terms and conditions of + this License, each Contributor hereby grants to You a perpetual, + worldwide, non-exclusive, no-charge, royalty-free, irrevocable + copyright license to reproduce, prepare Derivative Works of, + publicly display, publicly perform, sublicense, and distribute the + Work and such Derivative Works in Source or Object form. + + 3. Grant of Patent License. Subject to the terms and conditions of + this License, each Contributor hereby grants to You a perpetual, + worldwide, non-exclusive, no-charge, royalty-free, irrevocable + (except as stated in this section) patent license to make, have made, + use, offer to sell, sell, import, and otherwise transfer the Work, + where such license applies only to those patent claims licensable + by such Contributor that are necessarily infringed by their + Contribution(s) alone or by combination of their Contribution(s) + with the Work to which such Contribution(s) was submitted. If You + institute patent litigation against any entity (including a + cross-claim or counterclaim in a lawsuit) alleging that the Work + or a Contribution incorporated within the Work constitutes direct + or contributory patent infringement, then any patent licenses + granted to You under this License for that Work shall terminate + as of the date such litigation is filed. + + 4. Redistribution. You may reproduce and distribute copies of the + Work or Derivative Works thereof in any medium, with or without + modifications, and in Source or Object form, provided that You + meet the following conditions: + + (a) You must give any other recipients of the Work or + Derivative Works a copy of this License; and + + (b) You must cause any modified files to carry prominent notices + stating that You changed the files; and + + (c) You must retain, in the Source form of any Derivative Works + that You distribute, all copyright, patent, trademark, and + attribution notices from the Source form of the Work, + excluding those notices that do not pertain to any part of + the Derivative Works; and + + (d) If the Work includes a "NOTICE" text file as part of its + distribution, then any Derivative Works that You distribute must + include a readable copy of the attribution notices contained + within such NOTICE file, excluding those notices that do not + pertain to any part of the Derivative Works, in at least one + of the following places: within a NOTICE text file distributed + as part of the Derivative Works; within the Source form or + documentation, if provided along with the Derivative Works; or, + within a display generated by the Derivative Works, if and + wherever such third-party notices normally appear. The contents + of the NOTICE file are for informational purposes only and + do not modify the License. You may add Your own attribution + notices within Derivative Works that You distribute, alongside + or as an addendum to the NOTICE text from the Work, provided + that such additional attribution notices cannot be construed + as modifying the License. + + You may add Your own copyright statement to Your modifications and + may provide additional or different license terms and conditions + for use, reproduction, or distribution of Your modifications, or + for any such Derivative Works as a whole, provided Your use, + reproduction, and distribution of the Work otherwise complies with + the conditions stated in this License. + + 5. Submission of Contributions. Unless You explicitly state otherwise, + any Contribution intentionally submitted for inclusion in the Work + by You to the Licensor shall be under the terms and conditions of + this License, without any additional terms or conditions. + Notwithstanding the above, nothing herein shall supersede or modify + the terms of any separate license agreement you may have executed + with Licensor regarding such Contributions. + + 6. Trademarks. This License does not grant permission to use the trade + names, trademarks, service marks, or product names of the Licensor, + except as required for reasonable and customary use in describing the + origin of the Work and reproducing the content of the NOTICE file. + + 7. Disclaimer of Warranty. Unless required by applicable law or + agreed to in writing, Licensor provides the Work (and each + Contributor provides its Contributions) on an "AS IS" BASIS, + WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or + implied, including, without limitation, any warranties or conditions + of TITLE, NON-INFRINGEMENT, MERCHANTABILITY, or FITNESS FOR A + PARTICULAR PURPOSE. You are solely responsible for determining the + appropriateness of using or redistributing the Work and assume any + risks associated with Your exercise of permissions under this License. + + 8. Limitation of Liability. In no event and under no legal theory, + whether in tort (including negligence), contract, or otherwise, + unless required by applicable law (such as deliberate and grossly + negligent acts) or agreed to in writing, shall any Contributor be + liable to You for damages, including any direct, indirect, special, + incidental, or consequential damages of any character arising as a + result of this License or out of the use or inability to use the + Work (including but not limited to damages for loss of goodwill, + work stoppage, computer failure or malfunction, or any and all + other commercial damages or losses), even if such Contributor + has been advised of the possibility of such damages. + + 9. Accepting Warranty or Additional Liability. While redistributing + the Work or Derivative Works thereof, You may choose to offer, + and charge a fee for, acceptance of support, warranty, indemnity, + or other liability obligations and/or rights consistent with this + License. However, in accepting such obligations, You may act only + on Your own behalf and on Your sole responsibility, not on behalf + of any other Contributor, and only if You agree to indemnify, + defend, and hold each Contributor harmless for any liability + incurred by, or claims asserted against, such Contributor by reason + of your accepting any such warranty or additional liability. + + END OF TERMS AND CONDITIONS + + APPENDIX: How to apply the Apache License to your work. + + To apply the Apache License to your work, attach the following + boilerplate notice, with the fields enclosed by brackets "[]" + replaced with your own identifying information. (Don't include + the brackets!) The text should be enclosed in the appropriate + comment syntax for the file format. We also recommend that a + file or class name and description of purpose be included on the + same "printed page" as the copyright notice for easier + identification within third-party archives. + + Copyright [yyyy] [name of copyright owner] + + 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. + += vendor/k8s.io/utils/LICENSE 3b83ef96387f14655fc854ddc3c6bd57 +================================================================================ + + ================================================================================ = vendor/k8s.io/utils/pointer licensed under: = diff --git a/staging/src/k8s.io/apiextensions-apiserver/Godeps/Godeps.json b/staging/src/k8s.io/apiextensions-apiserver/Godeps/Godeps.json index 5c303ad9b5..850dc10b21 100644 --- a/staging/src/k8s.io/apiextensions-apiserver/Godeps/Godeps.json +++ b/staging/src/k8s.io/apiextensions-apiserver/Godeps/Godeps.json @@ -2556,15 +2556,15 @@ }, { "ImportPath": "k8s.io/utils/buffer", - "Rev": "8a87304934321b4b0ad72a7cb3cbc715d67d38c7" + "Rev": "ed37f7428a91fc2a81070808937195dcd46d320e" }, { "ImportPath": "k8s.io/utils/integer", - "Rev": "8a87304934321b4b0ad72a7cb3cbc715d67d38c7" + "Rev": "ed37f7428a91fc2a81070808937195dcd46d320e" }, { "ImportPath": "k8s.io/utils/trace", - "Rev": "8a87304934321b4b0ad72a7cb3cbc715d67d38c7" + "Rev": "ed37f7428a91fc2a81070808937195dcd46d320e" }, { "ImportPath": "sigs.k8s.io/yaml", diff --git a/staging/src/k8s.io/apiserver/Godeps/Godeps.json b/staging/src/k8s.io/apiserver/Godeps/Godeps.json index c3ee8cbccd..f620b658ba 100644 --- a/staging/src/k8s.io/apiserver/Godeps/Godeps.json +++ b/staging/src/k8s.io/apiserver/Godeps/Godeps.json @@ -2052,19 +2052,19 @@ }, { "ImportPath": "k8s.io/utils/buffer", - "Rev": "8a87304934321b4b0ad72a7cb3cbc715d67d38c7" + "Rev": "ed37f7428a91fc2a81070808937195dcd46d320e" }, { "ImportPath": "k8s.io/utils/integer", - "Rev": "8a87304934321b4b0ad72a7cb3cbc715d67d38c7" + "Rev": "ed37f7428a91fc2a81070808937195dcd46d320e" }, { "ImportPath": "k8s.io/utils/pointer", - "Rev": "8a87304934321b4b0ad72a7cb3cbc715d67d38c7" + "Rev": "ed37f7428a91fc2a81070808937195dcd46d320e" }, { "ImportPath": "k8s.io/utils/trace", - "Rev": "8a87304934321b4b0ad72a7cb3cbc715d67d38c7" + "Rev": "ed37f7428a91fc2a81070808937195dcd46d320e" }, { "ImportPath": "sigs.k8s.io/yaml", diff --git a/staging/src/k8s.io/cli-runtime/Godeps/Godeps.json b/staging/src/k8s.io/cli-runtime/Godeps/Godeps.json index 2f973b487d..d7a51f3423 100644 --- a/staging/src/k8s.io/cli-runtime/Godeps/Godeps.json +++ b/staging/src/k8s.io/cli-runtime/Godeps/Godeps.json @@ -612,7 +612,7 @@ }, { "ImportPath": "k8s.io/utils/integer", - "Rev": "8a87304934321b4b0ad72a7cb3cbc715d67d38c7" + "Rev": "ed37f7428a91fc2a81070808937195dcd46d320e" }, { "ImportPath": "sigs.k8s.io/yaml", diff --git a/staging/src/k8s.io/client-go/Godeps/Godeps.json b/staging/src/k8s.io/client-go/Godeps/Godeps.json index 69318cbc89..766154c6ad 100644 --- a/staging/src/k8s.io/client-go/Godeps/Godeps.json +++ b/staging/src/k8s.io/client-go/Godeps/Godeps.json @@ -616,15 +616,15 @@ }, { "ImportPath": "k8s.io/utils/buffer", - "Rev": "8a87304934321b4b0ad72a7cb3cbc715d67d38c7" + "Rev": "ed37f7428a91fc2a81070808937195dcd46d320e" }, { "ImportPath": "k8s.io/utils/integer", - "Rev": "8a87304934321b4b0ad72a7cb3cbc715d67d38c7" + "Rev": "ed37f7428a91fc2a81070808937195dcd46d320e" }, { "ImportPath": "k8s.io/utils/trace", - "Rev": "8a87304934321b4b0ad72a7cb3cbc715d67d38c7" + "Rev": "ed37f7428a91fc2a81070808937195dcd46d320e" }, { "ImportPath": "sigs.k8s.io/yaml", diff --git a/staging/src/k8s.io/cloud-provider/Godeps/Godeps.json b/staging/src/k8s.io/cloud-provider/Godeps/Godeps.json index c976b07d2b..93aae245fc 100644 --- a/staging/src/k8s.io/cloud-provider/Godeps/Godeps.json +++ b/staging/src/k8s.io/cloud-provider/Godeps/Godeps.json @@ -952,15 +952,15 @@ }, { "ImportPath": "k8s.io/utils/buffer", - "Rev": "8a87304934321b4b0ad72a7cb3cbc715d67d38c7" + "Rev": "ed37f7428a91fc2a81070808937195dcd46d320e" }, { "ImportPath": "k8s.io/utils/integer", - "Rev": "8a87304934321b4b0ad72a7cb3cbc715d67d38c7" + "Rev": "ed37f7428a91fc2a81070808937195dcd46d320e" }, { "ImportPath": "k8s.io/utils/trace", - "Rev": "8a87304934321b4b0ad72a7cb3cbc715d67d38c7" + "Rev": "ed37f7428a91fc2a81070808937195dcd46d320e" }, { "ImportPath": "sigs.k8s.io/yaml", diff --git a/staging/src/k8s.io/component-base/Godeps/Godeps.json b/staging/src/k8s.io/component-base/Godeps/Godeps.json index 774c215ba5..9ad4bcc8e7 100644 --- a/staging/src/k8s.io/component-base/Godeps/Godeps.json +++ b/staging/src/k8s.io/component-base/Godeps/Godeps.json @@ -152,7 +152,7 @@ }, { "ImportPath": "k8s.io/utils/pointer", - "Rev": "8a87304934321b4b0ad72a7cb3cbc715d67d38c7" + "Rev": "ed37f7428a91fc2a81070808937195dcd46d320e" } ] } diff --git a/staging/src/k8s.io/csi-api/Godeps/Godeps.json b/staging/src/k8s.io/csi-api/Godeps/Godeps.json index 1218aa5cc2..c4e39f69fe 100644 --- a/staging/src/k8s.io/csi-api/Godeps/Godeps.json +++ b/staging/src/k8s.io/csi-api/Godeps/Godeps.json @@ -548,15 +548,15 @@ }, { "ImportPath": "k8s.io/utils/buffer", - "Rev": "8a87304934321b4b0ad72a7cb3cbc715d67d38c7" + "Rev": "ed37f7428a91fc2a81070808937195dcd46d320e" }, { "ImportPath": "k8s.io/utils/integer", - "Rev": "8a87304934321b4b0ad72a7cb3cbc715d67d38c7" + "Rev": "ed37f7428a91fc2a81070808937195dcd46d320e" }, { "ImportPath": "k8s.io/utils/trace", - "Rev": "8a87304934321b4b0ad72a7cb3cbc715d67d38c7" + "Rev": "ed37f7428a91fc2a81070808937195dcd46d320e" }, { "ImportPath": "sigs.k8s.io/yaml", diff --git a/staging/src/k8s.io/kube-aggregator/Godeps/Godeps.json b/staging/src/k8s.io/kube-aggregator/Godeps/Godeps.json index bf8d2e1568..e39d8fa453 100644 --- a/staging/src/k8s.io/kube-aggregator/Godeps/Godeps.json +++ b/staging/src/k8s.io/kube-aggregator/Godeps/Godeps.json @@ -1832,15 +1832,15 @@ }, { "ImportPath": "k8s.io/utils/buffer", - "Rev": "8a87304934321b4b0ad72a7cb3cbc715d67d38c7" + "Rev": "ed37f7428a91fc2a81070808937195dcd46d320e" }, { "ImportPath": "k8s.io/utils/integer", - "Rev": "8a87304934321b4b0ad72a7cb3cbc715d67d38c7" + "Rev": "ed37f7428a91fc2a81070808937195dcd46d320e" }, { "ImportPath": "k8s.io/utils/trace", - "Rev": "8a87304934321b4b0ad72a7cb3cbc715d67d38c7" + "Rev": "ed37f7428a91fc2a81070808937195dcd46d320e" }, { "ImportPath": "sigs.k8s.io/yaml", diff --git a/staging/src/k8s.io/kube-controller-manager/Godeps/Godeps.json b/staging/src/k8s.io/kube-controller-manager/Godeps/Godeps.json index 7d41706b78..fd72952019 100644 --- a/staging/src/k8s.io/kube-controller-manager/Godeps/Godeps.json +++ b/staging/src/k8s.io/kube-controller-manager/Godeps/Godeps.json @@ -152,7 +152,7 @@ }, { "ImportPath": "k8s.io/utils/pointer", - "Rev": "8a87304934321b4b0ad72a7cb3cbc715d67d38c7" + "Rev": "ed37f7428a91fc2a81070808937195dcd46d320e" } ] } diff --git a/staging/src/k8s.io/kube-proxy/Godeps/Godeps.json b/staging/src/k8s.io/kube-proxy/Godeps/Godeps.json index 94aa516125..538d561a2b 100644 --- a/staging/src/k8s.io/kube-proxy/Godeps/Godeps.json +++ b/staging/src/k8s.io/kube-proxy/Godeps/Godeps.json @@ -152,7 +152,7 @@ }, { "ImportPath": "k8s.io/utils/pointer", - "Rev": "8a87304934321b4b0ad72a7cb3cbc715d67d38c7" + "Rev": "ed37f7428a91fc2a81070808937195dcd46d320e" } ] } diff --git a/staging/src/k8s.io/kube-scheduler/Godeps/Godeps.json b/staging/src/k8s.io/kube-scheduler/Godeps/Godeps.json index 1532f61221..5e62cd9764 100644 --- a/staging/src/k8s.io/kube-scheduler/Godeps/Godeps.json +++ b/staging/src/k8s.io/kube-scheduler/Godeps/Godeps.json @@ -152,7 +152,7 @@ }, { "ImportPath": "k8s.io/utils/pointer", - "Rev": "8a87304934321b4b0ad72a7cb3cbc715d67d38c7" + "Rev": "ed37f7428a91fc2a81070808937195dcd46d320e" } ] } diff --git a/staging/src/k8s.io/metrics/Godeps/Godeps.json b/staging/src/k8s.io/metrics/Godeps/Godeps.json index 80d6aa9b7c..317fa041e5 100644 --- a/staging/src/k8s.io/metrics/Godeps/Godeps.json +++ b/staging/src/k8s.io/metrics/Godeps/Godeps.json @@ -524,7 +524,7 @@ }, { "ImportPath": "k8s.io/utils/integer", - "Rev": "8a87304934321b4b0ad72a7cb3cbc715d67d38c7" + "Rev": "ed37f7428a91fc2a81070808937195dcd46d320e" }, { "ImportPath": "sigs.k8s.io/yaml", diff --git a/staging/src/k8s.io/node-api/Godeps/Godeps.json b/staging/src/k8s.io/node-api/Godeps/Godeps.json index 945acb3adc..b262245985 100644 --- a/staging/src/k8s.io/node-api/Godeps/Godeps.json +++ b/staging/src/k8s.io/node-api/Godeps/Godeps.json @@ -548,15 +548,15 @@ }, { "ImportPath": "k8s.io/utils/buffer", - "Rev": "8a87304934321b4b0ad72a7cb3cbc715d67d38c7" + "Rev": "ed37f7428a91fc2a81070808937195dcd46d320e" }, { "ImportPath": "k8s.io/utils/integer", - "Rev": "8a87304934321b4b0ad72a7cb3cbc715d67d38c7" + "Rev": "ed37f7428a91fc2a81070808937195dcd46d320e" }, { "ImportPath": "k8s.io/utils/trace", - "Rev": "8a87304934321b4b0ad72a7cb3cbc715d67d38c7" + "Rev": "ed37f7428a91fc2a81070808937195dcd46d320e" }, { "ImportPath": "sigs.k8s.io/yaml", diff --git a/staging/src/k8s.io/sample-apiserver/Godeps/Godeps.json b/staging/src/k8s.io/sample-apiserver/Godeps/Godeps.json index b920ad905a..d117d1fbea 100644 --- a/staging/src/k8s.io/sample-apiserver/Godeps/Godeps.json +++ b/staging/src/k8s.io/sample-apiserver/Godeps/Godeps.json @@ -1784,15 +1784,15 @@ }, { "ImportPath": "k8s.io/utils/buffer", - "Rev": "8a87304934321b4b0ad72a7cb3cbc715d67d38c7" + "Rev": "ed37f7428a91fc2a81070808937195dcd46d320e" }, { "ImportPath": "k8s.io/utils/integer", - "Rev": "8a87304934321b4b0ad72a7cb3cbc715d67d38c7" + "Rev": "ed37f7428a91fc2a81070808937195dcd46d320e" }, { "ImportPath": "k8s.io/utils/trace", - "Rev": "8a87304934321b4b0ad72a7cb3cbc715d67d38c7" + "Rev": "ed37f7428a91fc2a81070808937195dcd46d320e" }, { "ImportPath": "sigs.k8s.io/yaml", diff --git a/staging/src/k8s.io/sample-cli-plugin/Godeps/Godeps.json b/staging/src/k8s.io/sample-cli-plugin/Godeps/Godeps.json index d881a452c5..a58978263b 100644 --- a/staging/src/k8s.io/sample-cli-plugin/Godeps/Godeps.json +++ b/staging/src/k8s.io/sample-cli-plugin/Godeps/Godeps.json @@ -576,7 +576,7 @@ }, { "ImportPath": "k8s.io/utils/integer", - "Rev": "8a87304934321b4b0ad72a7cb3cbc715d67d38c7" + "Rev": "ed37f7428a91fc2a81070808937195dcd46d320e" }, { "ImportPath": "sigs.k8s.io/yaml", diff --git a/staging/src/k8s.io/sample-controller/Godeps/Godeps.json b/staging/src/k8s.io/sample-controller/Godeps/Godeps.json index 9f77150d79..f125e65ca5 100644 --- a/staging/src/k8s.io/sample-controller/Godeps/Godeps.json +++ b/staging/src/k8s.io/sample-controller/Godeps/Godeps.json @@ -1156,15 +1156,15 @@ }, { "ImportPath": "k8s.io/utils/buffer", - "Rev": "8a87304934321b4b0ad72a7cb3cbc715d67d38c7" + "Rev": "ed37f7428a91fc2a81070808937195dcd46d320e" }, { "ImportPath": "k8s.io/utils/integer", - "Rev": "8a87304934321b4b0ad72a7cb3cbc715d67d38c7" + "Rev": "ed37f7428a91fc2a81070808937195dcd46d320e" }, { "ImportPath": "k8s.io/utils/trace", - "Rev": "8a87304934321b4b0ad72a7cb3cbc715d67d38c7" + "Rev": "ed37f7428a91fc2a81070808937195dcd46d320e" }, { "ImportPath": "sigs.k8s.io/yaml", diff --git a/vendor/BUILD b/vendor/BUILD index 0ae266cc1a..4df7144898 100644 --- a/vendor/BUILD +++ b/vendor/BUILD @@ -473,6 +473,7 @@ filegroup( "//vendor/k8s.io/utils/integer:all-srcs", "//vendor/k8s.io/utils/io:all-srcs", "//vendor/k8s.io/utils/nsenter:all-srcs", + "//vendor/k8s.io/utils/path:all-srcs", "//vendor/k8s.io/utils/pointer:all-srcs", "//vendor/k8s.io/utils/trace:all-srcs", "//vendor/sigs.k8s.io/yaml:all-srcs", diff --git a/vendor/k8s.io/utils/nsenter/BUILD b/vendor/k8s.io/utils/nsenter/BUILD index 31fa8ba240..b8f8051b72 100644 --- a/vendor/k8s.io/utils/nsenter/BUILD +++ b/vendor/k8s.io/utils/nsenter/BUILD @@ -3,8 +3,6 @@ load("@io_bazel_rules_go//go:def.bzl", "go_library") go_library( name = "go_default_library", srcs = [ - "exec.go", - "exec_unsupported.go", "nsenter.go", "nsenter_unsupported.go", ], diff --git a/vendor/k8s.io/utils/nsenter/exec.go b/vendor/k8s.io/utils/nsenter/exec.go deleted file mode 100644 index 134497f0a7..0000000000 --- a/vendor/k8s.io/utils/nsenter/exec.go +++ /dev/null @@ -1,67 +0,0 @@ -// +build linux - -/* -Copyright 2018 The Kubernetes Authors. - -Licensed under the Apache License, Version 2.0 (the "License"); -you may not use this file except in compliance with the License. -You may obtain a copy of the License at - - http://www.apache.org/licenses/LICENSE-2.0 - -Unless required by applicable law or agreed to in writing, software -distributed under the License is distributed on an "AS IS" BASIS, -WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied. -See the License for the specific language governing permissions and -limitations under the License. -*/ - -package nsenter - -import ( - "context" - "fmt" - "path/filepath" - - "k8s.io/klog" - "k8s.io/utils/exec" -) - -// Executor wraps executor interface to be executed via nsenter -type Executor struct { - // Exec implementation - executor exec.Interface - // Path to the host's root proc path - hostProcMountNsPath string -} - -// NewNsenterExecutor returns new nsenter based executor -func NewNsenterExecutor(hostRootFsPath string, executor exec.Interface) *Executor { - hostProcMountNsPath := filepath.Join(hostRootFsPath, mountNsPath) - nsExecutor := &Executor{ - hostProcMountNsPath: hostProcMountNsPath, - executor: executor, - } - return nsExecutor -} - -// Command returns a command wrapped with nenter -func (nsExecutor *Executor) Command(cmd string, args ...string) exec.Cmd { - fullArgs := append([]string{fmt.Sprintf("--mount=%s", nsExecutor.hostProcMountNsPath), "--"}, - append([]string{cmd}, args...)...) - klog.V(5).Infof("Running nsenter command: %v %v", nsenterPath, fullArgs) - return nsExecutor.executor.Command(nsenterPath, fullArgs...) -} - -// CommandContext returns a CommandContext wrapped with nsenter -func (nsExecutor *Executor) CommandContext(ctx context.Context, cmd string, args ...string) exec.Cmd { - fullArgs := append([]string{fmt.Sprintf("--mount=%s", nsExecutor.hostProcMountNsPath), "--"}, - append([]string{cmd}, args...)...) - klog.V(5).Infof("Running nsenter command: %v %v", nsenterPath, fullArgs) - return nsExecutor.executor.CommandContext(ctx, nsenterPath, fullArgs...) -} - -// LookPath returns a LookPath wrapped with nsenter -func (nsExecutor *Executor) LookPath(file string) (string, error) { - return "", fmt.Errorf("not implemented, error looking up : %s", file) -} diff --git a/vendor/k8s.io/utils/nsenter/exec_unsupported.go b/vendor/k8s.io/utils/nsenter/exec_unsupported.go deleted file mode 100644 index eecbdfc292..0000000000 --- a/vendor/k8s.io/utils/nsenter/exec_unsupported.go +++ /dev/null @@ -1,58 +0,0 @@ -// +build !linux - -/* -Copyright 2017 The Kubernetes Authors. - -Licensed under the Apache License, Version 2.0 (the "License"); -you may not use this file except in compliance with the License. -You may obtain a copy of the License at - - http://www.apache.org/licenses/LICENSE-2.0 - -Unless required by applicable law or agreed to in writing, software -distributed under the License is distributed on an "AS IS" BASIS, -WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied. -See the License for the specific language governing permissions and -limitations under the License. -*/ - -package nsenter - -import ( - "context" - "fmt" - - "k8s.io/utils/exec" -) - -// Executor wraps executor interface to be executed via nsenter -type Executor struct { - // Exec implementation - executor exec.Interface - // Path to the host's root proc path - hostProcMountNsPath string -} - -// NewNsenterExecutor returns new nsenter based executor -func NewNsenterExecutor(hostRootFsPath string, executor exec.Interface) *Executor { - nsExecutor := &Executor{ - hostProcMountNsPath: hostRootFsPath, - executor: executor, - } - return nsExecutor -} - -// Command returns a command wrapped with nenter -func (nsExecutor *Executor) Command(cmd string, args ...string) exec.Cmd { - return nil -} - -// CommandContext returns a CommandContext wrapped with nsenter -func (nsExecutor *Executor) CommandContext(ctx context.Context, cmd string, args ...string) exec.Cmd { - return nil -} - -// LookPath returns a LookPath wrapped with nsenter -func (nsExecutor *Executor) LookPath(file string) (string, error) { - return "", fmt.Errorf("not implemented, error looking up : %s", file) -} diff --git a/vendor/k8s.io/utils/nsenter/nsenter.go b/vendor/k8s.io/utils/nsenter/nsenter.go index 13532f0633..a6fa0c2237 100644 --- a/vendor/k8s.io/utils/nsenter/nsenter.go +++ b/vendor/k8s.io/utils/nsenter/nsenter.go @@ -40,10 +40,13 @@ const ( nsenterPath = "nsenter" ) -// Nsenter is part of experimental support for running the kubelet +// Nsenter is a type alias for backward compatibility +type Nsenter = NSEnter + +// NSEnter is part of experimental support for running the kubelet // in a container. // -// Nsenter requires: +// NSEnter requires: // // 1. Docker >= 1.6 due to the dependency on the slave propagation mode // of the bind-mount of the kubelet root directory in the container. @@ -65,20 +68,20 @@ const ( // systemd is installed/enabled in the operating system. // For more information about mount propagation modes, see: // https://www.kernel.org/doc/Documentation/filesystems/sharedsubtree.txt -type Nsenter struct { +type NSEnter struct { // a map of commands to their paths on the host filesystem paths map[string]string // Path to the host filesystem, typically "/rootfs". Used only for testing. hostRootFsPath string - // Exec implementation, used only for testing + // Exec implementation executor exec.Interface } -// NewNsenter constructs a new instance of Nsenter -func NewNsenter(hostRootFsPath string, executor exec.Interface) (*Nsenter, error) { - ne := &Nsenter{ +// NewNsenter constructs a new instance of NSEnter +func NewNsenter(hostRootFsPath string, executor exec.Interface) (*NSEnter, error) { + ne := &NSEnter{ hostRootFsPath: hostRootFsPath, executor: executor, } @@ -88,7 +91,7 @@ func NewNsenter(hostRootFsPath string, executor exec.Interface) (*Nsenter, error return ne, nil } -func (ne *Nsenter) initPaths() error { +func (ne *NSEnter) initPaths() error { ne.paths = map[string]string{} binaries := []string{ "mount", @@ -122,7 +125,7 @@ func (ne *Nsenter) initPaths() error { } // Exec executes nsenter commands in hostProcMountNsPath mount namespace -func (ne *Nsenter) Exec(cmd string, args []string) exec.Cmd { +func (ne *NSEnter) Exec(cmd string, args []string) exec.Cmd { hostProcMountNsPath := filepath.Join(ne.hostRootFsPath, mountNsPath) fullArgs := append([]string{fmt.Sprintf("--mount=%s", hostProcMountNsPath), "--"}, append([]string{ne.AbsHostPath(cmd)}, args...)...) @@ -130,8 +133,27 @@ func (ne *Nsenter) Exec(cmd string, args []string) exec.Cmd { return ne.executor.Command(nsenterPath, fullArgs...) } +// Command returns a command wrapped with nsenter +func (ne *NSEnter) Command(cmd string, args ...string) exec.Cmd { + return ne.Exec(cmd, args) +} + +// CommandContext returns a CommandContext wrapped with nsenter +func (ne *NSEnter) CommandContext(ctx context.Context, cmd string, args ...string) exec.Cmd { + hostProcMountNsPath := filepath.Join(ne.hostRootFsPath, mountNsPath) + fullArgs := append([]string{fmt.Sprintf("--mount=%s", hostProcMountNsPath), "--"}, + append([]string{ne.AbsHostPath(cmd)}, args...)...) + klog.V(5).Infof("Running nsenter command: %v %v", nsenterPath, fullArgs) + return ne.executor.CommandContext(ctx, nsenterPath, fullArgs...) +} + +// LookPath returns a LookPath wrapped with nsenter +func (ne *NSEnter) LookPath(file string) (string, error) { + return "", fmt.Errorf("not implemented, error looking up : %s", file) +} + // AbsHostPath returns the absolute runnable path for a specified command -func (ne *Nsenter) AbsHostPath(command string) string { +func (ne *NSEnter) AbsHostPath(command string) string { path, ok := ne.paths[command] if !ok { return command @@ -140,7 +162,7 @@ func (ne *Nsenter) AbsHostPath(command string) string { } // SupportsSystemd checks whether command systemd-run exists -func (ne *Nsenter) SupportsSystemd() (string, bool) { +func (ne *NSEnter) SupportsSystemd() (string, bool) { systemdRunPath, ok := ne.paths["systemd-run"] return systemdRunPath, ok && systemdRunPath != "" } @@ -158,7 +180,7 @@ func (ne *Nsenter) SupportsSystemd() (string, bool) { // // BEWARE! EvalSymlinks is not able to detect symlink looks with mustExist=false! // If /tmp/link is symlink to /tmp/link, EvalSymlinks(/tmp/link/foo) returns /tmp/link/foo. -func (ne *Nsenter) EvalSymlinks(pathname string, mustExist bool) (string, error) { +func (ne *NSEnter) EvalSymlinks(pathname string, mustExist bool) (string, error) { var args []string if mustExist { // "realpath -e: all components of the path must exist" @@ -178,16 +200,16 @@ func (ne *Nsenter) EvalSymlinks(pathname string, mustExist bool) (string, error) // KubeletPath returns the path name that can be accessed by containerized // kubelet. It is recommended to resolve symlinks on the host by EvalSymlinks // before calling this function -func (ne *Nsenter) KubeletPath(pathname string) string { +func (ne *NSEnter) KubeletPath(pathname string) string { return filepath.Join(ne.hostRootFsPath, pathname) } -// NewFakeNsenter returns a Nsenter that does not run "nsenter --mount=... --", +// NewFakeNsenter returns a NSEnter that does not run "nsenter --mount=... --", // but runs everything in the same mount namespace as the unit test binary. // rootfsPath is supposed to be a symlink, e.g. /tmp/xyz/rootfs -> /. -// This fake Nsenter is enough for most operations, e.g. to resolve symlinks, +// This fake NSEnter is enough for most operations, e.g. to resolve symlinks, // but it's not enough to call /bin/mount - unit tests don't run as root. -func NewFakeNsenter(rootfsPath string) (*Nsenter, error) { +func NewFakeNsenter(rootfsPath string) (*NSEnter, error) { executor := &fakeExec{ rootfsPath: rootfsPath, } @@ -218,7 +240,7 @@ type fakeExec struct { } func (f fakeExec) Command(cmd string, args ...string) exec.Cmd { - // This will intentionaly panic if Nsenter does not provide enough arguments. + // This will intentionaly panic if NSEnter does not provide enough arguments. realCmd := args[2] realArgs := args[3:] return exec.New().Command(realCmd, realArgs...) @@ -233,3 +255,4 @@ func (fakeExec) CommandContext(ctx context.Context, cmd string, args ...string) } var _ exec.Interface = fakeExec{} +var _ exec.Interface = &NSEnter{} diff --git a/vendor/k8s.io/utils/nsenter/nsenter_unsupported.go b/vendor/k8s.io/utils/nsenter/nsenter_unsupported.go index 0618b9da46..e38c7e8113 100644 --- a/vendor/k8s.io/utils/nsenter/nsenter_unsupported.go +++ b/vendor/k8s.io/utils/nsenter/nsenter_unsupported.go @@ -19,6 +19,9 @@ limitations under the License. package nsenter import ( + "context" + "fmt" + "k8s.io/utils/exec" ) @@ -28,29 +31,49 @@ const ( DefaultHostRootFsPath = "/rootfs" ) -// Nsenter is part of experimental support for running the kubelet +// Nsenter is a type alias for backward compatibility +type Nsenter = NSEnter + +// NSEnter is part of experimental support for running the kubelet // in a container. -type Nsenter struct { +type NSEnter struct { // a map of commands to their paths on the host filesystem Paths map[string]string } -// NewNsenter constructs a new instance of Nsenter +// NewNsenter constructs a new instance of NSEnter func NewNsenter(hostRootFsPath string, executor exec.Interface) (*Nsenter, error) { return &Nsenter{}, nil } // Exec executes nsenter commands in hostProcMountNsPath mount namespace -func (ne *Nsenter) Exec(cmd string, args []string) exec.Cmd { +func (ne *NSEnter) Exec(cmd string, args []string) exec.Cmd { return nil } // AbsHostPath returns the absolute runnable path for a specified command -func (ne *Nsenter) AbsHostPath(command string) string { +func (ne *NSEnter) AbsHostPath(command string) string { return "" } // SupportsSystemd checks whether command systemd-run exists -func (ne *Nsenter) SupportsSystemd() (string, bool) { +func (ne *NSEnter) SupportsSystemd() (string, bool) { return "", false } + +// Command returns a command wrapped with nenter +func (ne *NSEnter) Command(cmd string, args ...string) exec.Cmd { + return nil +} + +// CommandContext returns a CommandContext wrapped with nsenter +func (ne *NSEnter) CommandContext(ctx context.Context, cmd string, args ...string) exec.Cmd { + return nil +} + +// LookPath returns a LookPath wrapped with nsenter +func (ne *NSEnter) LookPath(file string) (string, error) { + return "", fmt.Errorf("not implemented, error looking up : %s", file) +} + +var _ exec.Interface = &NSEnter{} diff --git a/vendor/k8s.io/utils/path/BUILD b/vendor/k8s.io/utils/path/BUILD new file mode 100644 index 0000000000..43e3f6f88d --- /dev/null +++ b/vendor/k8s.io/utils/path/BUILD @@ -0,0 +1,23 @@ +load("@io_bazel_rules_go//go:def.bzl", "go_library") + +go_library( + name = "go_default_library", + srcs = ["file.go"], + importmap = "k8s.io/kubernetes/vendor/k8s.io/utils/path", + importpath = "k8s.io/utils/path", + visibility = ["//visibility:public"], +) + +filegroup( + name = "package-srcs", + srcs = glob(["**"]), + tags = ["automanaged"], + visibility = ["//visibility:private"], +) + +filegroup( + name = "all-srcs", + srcs = [":package-srcs"], + tags = ["automanaged"], + visibility = ["//visibility:public"], +) diff --git a/vendor/k8s.io/utils/path/file.go b/vendor/k8s.io/utils/path/file.go new file mode 100644 index 0000000000..a57285d3b4 --- /dev/null +++ b/vendor/k8s.io/utils/path/file.go @@ -0,0 +1,78 @@ +/* +Copyright 2017 The Kubernetes Authors. + +Licensed under the Apache License, Version 2.0 (the "License"); +you may not use this file except in compliance with the License. +You may obtain a copy of the License at + + http://www.apache.org/licenses/LICENSE-2.0 + +Unless required by applicable law or agreed to in writing, software +distributed under the License is distributed on an "AS IS" BASIS, +WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied. +See the License for the specific language governing permissions and +limitations under the License. +*/ + +package path + +import ( + "errors" + "os" +) + +// LinkTreatment is the base type for constants used by Exists that indicate +// how symlinks are treated for existence checks. +type LinkTreatment int + +const ( + // CheckFollowSymlink follows the symlink and verifies that the target of + // the symlink exists. + CheckFollowSymlink LinkTreatment = iota + + // CheckSymlinkOnly does not follow the symlink and verfies only that they + // symlink itself exists. + CheckSymlinkOnly +) + +// ErrInvalidLinkTreatment indicates that the link treatment behavior requested +// is not a valid behavior. +var ErrInvalidLinkTreatment = errors.New("unknown link behavior") + +// Exists checks if specified file, directory, or symlink exists. The behavior +// of the test depends on the linkBehaviour argument. See LinkTreatment for +// more details. +func Exists(linkBehavior LinkTreatment, filename string) (bool, error) { + var err error + + if linkBehavior == CheckFollowSymlink { + _, err = os.Stat(filename) + } else if linkBehavior == CheckSymlinkOnly { + _, err = os.Lstat(filename) + } else { + return false, ErrInvalidLinkTreatment + } + + if os.IsNotExist(err) { + return false, nil + } else if err != nil { + return false, err + } + return true, nil +} + +// ReadDirNoStat returns a string of files/directories contained +// in dirname without calling lstat on them. +func ReadDirNoStat(dirname string) ([]string, error) { + if dirname == "" { + dirname = "." + } + + f, err := os.Open(dirname) + if err != nil { + return nil, err + } + defer f.Close() + + return f.Readdirnames(-1) +} From 84191eb99bc83a5a95f461af90f2b12792862582 Mon Sep 17 00:00:00 2001 From: Andrew Kim Date: Tue, 29 Jan 2019 14:23:23 -0500 Subject: [PATCH 2/3] replace pkg/util/file with k8s.io/utils/path --- cmd/kubeadm/.import-restrictions | 2 +- hack/.golint_failures | 1 - pkg/controller/.import-restrictions | 2 +- pkg/kubectl/.import-restrictions | 2 +- pkg/kubelet/BUILD | 2 +- pkg/kubelet/cm/BUILD | 2 +- pkg/kubelet/cm/container_manager_linux.go | 6 +- pkg/kubelet/kubelet_getters.go | 4 +- pkg/kubelet/volumemanager/reconciler/BUILD | 2 +- .../volumemanager/reconciler/reconciler.go | 4 +- pkg/master/tunneler/BUILD | 2 +- pkg/master/tunneler/ssh.go | 6 +- pkg/security/apparmor/BUILD | 2 +- pkg/security/apparmor/validate.go | 4 +- pkg/util/BUILD | 1 - pkg/util/file/BUILD | 36 ----- pkg/util/file/file.go | 57 ------- pkg/util/file/file_test.go | 149 ------------------ pkg/util/mount/BUILD | 4 +- pkg/util/mount/mount_linux.go | 4 +- pkg/util/mount/mount_windows.go | 4 +- pkg/util/mount/nsenter_mount.go | 4 +- pkg/volume/gcepd/BUILD | 2 +- pkg/volume/gcepd/gce_util.go | 4 +- pkg/volume/host_path/BUILD | 2 +- pkg/volume/host_path/host_path_test.go | 4 +- pkg/volume/rbd/BUILD | 2 +- pkg/volume/rbd/rbd_util.go | 4 +- 28 files changed, 37 insertions(+), 281 deletions(-) delete mode 100644 pkg/util/file/BUILD delete mode 100644 pkg/util/file/file.go delete mode 100644 pkg/util/file/file_test.go diff --git a/cmd/kubeadm/.import-restrictions b/cmd/kubeadm/.import-restrictions index c37f6c23f5..797fdbaa4f 100644 --- a/cmd/kubeadm/.import-restrictions +++ b/cmd/kubeadm/.import-restrictions @@ -41,6 +41,7 @@ "AllowedPrefixes": [ "k8s.io/utils/exec", "k8s.io/utils/integer", + "k8s.io/utils/path", "k8s.io/utils/pointer" ] }, @@ -77,7 +78,6 @@ "k8s.io/kubernetes/pkg/scheduler/util", "k8s.io/kubernetes/pkg/security/apparmor", "k8s.io/kubernetes/pkg/serviceaccount", - "k8s.io/kubernetes/pkg/util/file", "k8s.io/kubernetes/pkg/util/hash", "k8s.io/kubernetes/pkg/util/initsystem", "k8s.io/kubernetes/pkg/util/ipvs", diff --git a/hack/.golint_failures b/hack/.golint_failures index 9af4827aee..171a726ab8 100644 --- a/hack/.golint_failures +++ b/hack/.golint_failures @@ -355,7 +355,6 @@ pkg/util/bandwidth pkg/util/config pkg/util/ebtables pkg/util/env -pkg/util/file pkg/util/goroutinemap/exponentialbackoff pkg/util/initsystem pkg/util/iptables diff --git a/pkg/controller/.import-restrictions b/pkg/controller/.import-restrictions index bb88f40d2e..73a7fce74d 100644 --- a/pkg/controller/.import-restrictions +++ b/pkg/controller/.import-restrictions @@ -307,7 +307,6 @@ "k8s.io/kubernetes/pkg/scheduler/api", "k8s.io/kubernetes/pkg/scheduler/util", "k8s.io/kubernetes/pkg/security/apparmor", - "k8s.io/kubernetes/pkg/util/file", "k8s.io/kubernetes/pkg/util/net/sets", "k8s.io/kubernetes/pkg/util/parsers", "k8s.io/kubernetes/pkg/fieldpath", @@ -340,6 +339,7 @@ "k8s.io/utils/nsenter", "k8s.io/utils/integer", "k8s.io/utils/io", + "k8s.io/utils/path", "k8s.io/utils/pointer", "k8s.io/utils/exec" ] diff --git a/pkg/kubectl/.import-restrictions b/pkg/kubectl/.import-restrictions index f635e6709f..cf4ac57da4 100644 --- a/pkg/kubectl/.import-restrictions +++ b/pkg/kubectl/.import-restrictions @@ -126,7 +126,6 @@ "k8s.io/kubernetes/pkg/scheduler/volumebinder", "k8s.io/kubernetes/pkg/security/apparmor", "k8s.io/kubernetes/pkg/serviceaccount", - "k8s.io/kubernetes/pkg/util/file", "k8s.io/kubernetes/pkg/util/goroutinemap", "k8s.io/kubernetes/pkg/util/hash", "k8s.io/kubernetes/pkg/util/interrupt", @@ -144,6 +143,7 @@ "k8s.io/kubernetes/pkg/volume/util", "k8s.io/utils/nsenter", "k8s.io/utils/io", + "k8s.io/utils/path", "k8s.io/utils/pointer" ], "ForbiddenPrefixes": [] diff --git a/pkg/kubelet/BUILD b/pkg/kubelet/BUILD index 722309afa4..ba96674a91 100644 --- a/pkg/kubelet/BUILD +++ b/pkg/kubelet/BUILD @@ -103,7 +103,6 @@ go_library( "//pkg/security/podsecuritypolicy/sysctl:go_default_library", "//pkg/securitycontext:go_default_library", "//pkg/util/dbus:go_default_library", - "//pkg/util/file:go_default_library", "//pkg/util/iptables:go_default_library", "//pkg/util/mount:go_default_library", "//pkg/util/node:go_default_library", @@ -150,6 +149,7 @@ go_library( "//vendor/k8s.io/klog:go_default_library", "//vendor/k8s.io/utils/exec:go_default_library", "//vendor/k8s.io/utils/integer:go_default_library", + "//vendor/k8s.io/utils/path:go_default_library", ], ) diff --git a/pkg/kubelet/cm/BUILD b/pkg/kubelet/cm/BUILD index e6e44b4435..353b7c641a 100644 --- a/pkg/kubelet/cm/BUILD +++ b/pkg/kubelet/cm/BUILD @@ -74,7 +74,6 @@ go_library( "//pkg/kubelet/metrics:go_default_library", "//pkg/kubelet/qos:go_default_library", "//pkg/kubelet/types:go_default_library", - "//pkg/util/file:go_default_library", "//pkg/util/mount:go_default_library", "//pkg/util/oom:go_default_library", "//pkg/util/procfs:go_default_library", @@ -88,6 +87,7 @@ go_library( "//vendor/github.com/opencontainers/runc/libcontainer/cgroups/fs:go_default_library", "//vendor/github.com/opencontainers/runc/libcontainer/cgroups/systemd:go_default_library", "//vendor/github.com/opencontainers/runc/libcontainer/configs:go_default_library", + "//vendor/k8s.io/utils/path:go_default_library", ], "@io_bazel_rules_go//go/platform:nacl": [ "//pkg/kubelet/cadvisor:go_default_library", diff --git a/pkg/kubelet/cm/container_manager_linux.go b/pkg/kubelet/cm/container_manager_linux.go index ea0a5ad215..af7a779173 100644 --- a/pkg/kubelet/cm/container_manager_linux.go +++ b/pkg/kubelet/cm/container_manager_linux.go @@ -56,11 +56,11 @@ import ( "k8s.io/kubernetes/pkg/kubelet/status" "k8s.io/kubernetes/pkg/kubelet/util/pluginwatcher" schedulernodeinfo "k8s.io/kubernetes/pkg/scheduler/nodeinfo" - utilfile "k8s.io/kubernetes/pkg/util/file" "k8s.io/kubernetes/pkg/util/mount" "k8s.io/kubernetes/pkg/util/oom" "k8s.io/kubernetes/pkg/util/procfs" utilsysctl "k8s.io/kubernetes/pkg/util/sysctl" + utilpath "k8s.io/utils/path" ) const ( @@ -179,11 +179,11 @@ func validateSystemRequirements(mountUtil mount.Interface) (features, error) { // Check if cpu quota is available. // CPU cgroup is required and so it expected to be mounted at this point. - periodExists, err := utilfile.FileExists(path.Join(cpuMountPoint, "cpu.cfs_period_us")) + periodExists, err := utilpath.Exists(utilpath.CheckFollowSymlink, path.Join(cpuMountPoint, "cpu.cfs_period_us")) if err != nil { klog.Errorf("failed to detect if CPU cgroup cpu.cfs_period_us is available - %v", err) } - quotaExists, err := utilfile.FileExists(path.Join(cpuMountPoint, "cpu.cfs_quota_us")) + quotaExists, err := utilpath.Exists(utilpath.CheckFollowSymlink, path.Join(cpuMountPoint, "cpu.cfs_quota_us")) if err != nil { klog.Errorf("failed to detect if CPU cgroup cpu.cfs_quota_us is available - %v", err) } diff --git a/pkg/kubelet/kubelet_getters.go b/pkg/kubelet/kubelet_getters.go index 1386a83ccb..5331f6418f 100644 --- a/pkg/kubelet/kubelet_getters.go +++ b/pkg/kubelet/kubelet_getters.go @@ -30,9 +30,9 @@ import ( "k8s.io/kubernetes/pkg/kubelet/cm" "k8s.io/kubernetes/pkg/kubelet/config" kubecontainer "k8s.io/kubernetes/pkg/kubelet/container" - utilfile "k8s.io/kubernetes/pkg/util/file" "k8s.io/kubernetes/pkg/util/mount" utilnode "k8s.io/kubernetes/pkg/util/node" + utilpath "k8s.io/utils/path" ) // getRootDir returns the full path to the directory under which kubelet can @@ -293,7 +293,7 @@ func (kl *Kubelet) getPodVolumePathListFromDisk(podUID types.UID) ([]string, err for _, volumePluginDir := range volumePluginDirs { volumePluginName := volumePluginDir.Name() volumePluginPath := filepath.Join(podVolDir, volumePluginName) - volumeDirs, err := utilfile.ReadDirNoStat(volumePluginPath) + volumeDirs, err := utilpath.ReadDirNoStat(volumePluginPath) if err != nil { return volumes, fmt.Errorf("Could not read directory %s: %v", volumePluginPath, err) } diff --git a/pkg/kubelet/volumemanager/reconciler/BUILD b/pkg/kubelet/volumemanager/reconciler/BUILD index ca88d62d7b..7c38344b45 100644 --- a/pkg/kubelet/volumemanager/reconciler/BUILD +++ b/pkg/kubelet/volumemanager/reconciler/BUILD @@ -14,7 +14,6 @@ go_library( "//pkg/features:go_default_library", "//pkg/kubelet/config:go_default_library", "//pkg/kubelet/volumemanager/cache:go_default_library", - "//pkg/util/file:go_default_library", "//pkg/util/goroutinemap/exponentialbackoff:go_default_library", "//pkg/util/mount:go_default_library", "//pkg/util/strings:go_default_library", @@ -30,6 +29,7 @@ go_library( "//staging/src/k8s.io/apiserver/pkg/util/feature:go_default_library", "//staging/src/k8s.io/client-go/kubernetes:go_default_library", "//vendor/k8s.io/klog:go_default_library", + "//vendor/k8s.io/utils/path:go_default_library", ], ) diff --git a/pkg/kubelet/volumemanager/reconciler/reconciler.go b/pkg/kubelet/volumemanager/reconciler/reconciler.go index a28517d887..56668ffd21 100644 --- a/pkg/kubelet/volumemanager/reconciler/reconciler.go +++ b/pkg/kubelet/volumemanager/reconciler/reconciler.go @@ -36,7 +36,6 @@ import ( "k8s.io/kubernetes/pkg/features" "k8s.io/kubernetes/pkg/kubelet/config" "k8s.io/kubernetes/pkg/kubelet/volumemanager/cache" - utilfile "k8s.io/kubernetes/pkg/util/file" "k8s.io/kubernetes/pkg/util/goroutinemap/exponentialbackoff" "k8s.io/kubernetes/pkg/util/mount" utilstrings "k8s.io/kubernetes/pkg/util/strings" @@ -45,6 +44,7 @@ import ( "k8s.io/kubernetes/pkg/volume/util/nestedpendingoperations" "k8s.io/kubernetes/pkg/volume/util/operationexecutor" volumetypes "k8s.io/kubernetes/pkg/volume/util/types" + utilpath "k8s.io/utils/path" ) // Reconciler runs a periodic loop to reconcile the desired state of the world @@ -673,7 +673,7 @@ func getVolumesFromPodDir(podDir string) ([]podVolume, error) { for _, volumeDir := range volumesDirInfo { pluginName := volumeDir.Name() volumePluginPath := path.Join(volumesDir, pluginName) - volumePluginDirs, err := utilfile.ReadDirNoStat(volumePluginPath) + volumePluginDirs, err := utilpath.ReadDirNoStat(volumePluginPath) if err != nil { klog.Errorf("Could not read volume plugin directory %q: %v", volumePluginPath, err) continue diff --git a/pkg/master/tunneler/BUILD b/pkg/master/tunneler/BUILD index 99648d7f8a..9dbaecd6ed 100644 --- a/pkg/master/tunneler/BUILD +++ b/pkg/master/tunneler/BUILD @@ -22,10 +22,10 @@ go_library( importpath = "k8s.io/kubernetes/pkg/master/tunneler", deps = [ "//pkg/ssh:go_default_library", - "//pkg/util/file:go_default_library", "//staging/src/k8s.io/apimachinery/pkg/util/clock:go_default_library", "//staging/src/k8s.io/apimachinery/pkg/util/wait:go_default_library", "//vendor/k8s.io/klog:go_default_library", + "//vendor/k8s.io/utils/path:go_default_library", ], ) diff --git a/pkg/master/tunneler/ssh.go b/pkg/master/tunneler/ssh.go index 4bf8307bad..f30a967e34 100644 --- a/pkg/master/tunneler/ssh.go +++ b/pkg/master/tunneler/ssh.go @@ -31,7 +31,7 @@ import ( "k8s.io/apimachinery/pkg/util/wait" "k8s.io/klog" "k8s.io/kubernetes/pkg/ssh" - utilfile "k8s.io/kubernetes/pkg/util/file" + utilpath "k8s.io/utils/path" ) type InstallSSHKey func(ctx context.Context, user string, data []byte) error @@ -119,7 +119,7 @@ func (c *SSHTunneler) Run(getAddresses AddressFunc) { // public keyfile is written last, so check for that. publicKeyFile := c.SSHKeyfile + ".pub" - exists, err := utilfile.FileExists(publicKeyFile) + exists, err := utilpath.Exists(utilpath.CheckFollowSymlink, publicKeyFile) if err != nil { klog.Errorf("Error detecting if key exists: %v", err) } else if !exists { @@ -208,7 +208,7 @@ func generateSSHKey(privateKeyfile, publicKeyfile string) error { } // If private keyfile already exists, we must have only made it halfway // through last time, so delete it. - exists, err := utilfile.FileExists(privateKeyfile) + exists, err := utilpath.Exists(utilpath.CheckFollowSymlink, privateKeyfile) if err != nil { klog.Errorf("Error detecting if private key exists: %v", err) } else if exists { diff --git a/pkg/security/apparmor/BUILD b/pkg/security/apparmor/BUILD index 576a278030..fb29986efd 100644 --- a/pkg/security/apparmor/BUILD +++ b/pkg/security/apparmor/BUILD @@ -17,9 +17,9 @@ go_library( deps = [ "//pkg/features:go_default_library", "//pkg/kubelet/types:go_default_library", - "//pkg/util/file:go_default_library", "//staging/src/k8s.io/api/core/v1:go_default_library", "//staging/src/k8s.io/apiserver/pkg/util/feature:go_default_library", + "//vendor/k8s.io/utils/path:go_default_library", ], ) diff --git a/pkg/security/apparmor/validate.go b/pkg/security/apparmor/validate.go index 25ea591fca..1d03c7ee02 100644 --- a/pkg/security/apparmor/validate.go +++ b/pkg/security/apparmor/validate.go @@ -29,7 +29,7 @@ import ( utilfeature "k8s.io/apiserver/pkg/util/feature" "k8s.io/kubernetes/pkg/features" kubetypes "k8s.io/kubernetes/pkg/kubelet/types" - utilfile "k8s.io/kubernetes/pkg/util/file" + utilpath "k8s.io/utils/path" ) // Whether AppArmor should be disabled by default. @@ -195,7 +195,7 @@ func getAppArmorFS() (string, error) { } if fields[2] == "securityfs" { appArmorFS := path.Join(fields[1], "apparmor") - if ok, err := utilfile.FileExists(appArmorFS); !ok { + if ok, err := utilpath.Exists(utilpath.CheckFollowSymlink, appArmorFS); !ok { msg := fmt.Sprintf("path %s does not exist", appArmorFS) if err != nil { return "", fmt.Errorf("%s: %v", msg, err) diff --git a/pkg/util/BUILD b/pkg/util/BUILD index b2620448b6..a69ed4d38b 100644 --- a/pkg/util/BUILD +++ b/pkg/util/BUILD @@ -20,7 +20,6 @@ filegroup( "//pkg/util/dbus:all-srcs", "//pkg/util/ebtables:all-srcs", "//pkg/util/env:all-srcs", - "//pkg/util/file:all-srcs", "//pkg/util/filesystem:all-srcs", "//pkg/util/flag:all-srcs", "//pkg/util/flock:all-srcs", diff --git a/pkg/util/file/BUILD b/pkg/util/file/BUILD deleted file mode 100644 index 299528ca00..0000000000 --- a/pkg/util/file/BUILD +++ /dev/null @@ -1,36 +0,0 @@ -package(default_visibility = ["//visibility:public"]) - -load( - "@io_bazel_rules_go//go:def.bzl", - "go_library", - "go_test", -) - -go_library( - name = "go_default_library", - srcs = ["file.go"], - importpath = "k8s.io/kubernetes/pkg/util/file", -) - -filegroup( - name = "package-srcs", - srcs = glob(["**"]), - tags = ["automanaged"], - visibility = ["//visibility:private"], -) - -filegroup( - name = "all-srcs", - srcs = [":package-srcs"], - tags = ["automanaged"], -) - -go_test( - name = "go_default_test", - srcs = ["file_test.go"], - embed = [":go_default_library"], - deps = [ - "//vendor/github.com/spf13/afero:go_default_library", - "//vendor/github.com/stretchr/testify/assert:go_default_library", - ], -) diff --git a/pkg/util/file/file.go b/pkg/util/file/file.go deleted file mode 100644 index 70d26c4ef7..0000000000 --- a/pkg/util/file/file.go +++ /dev/null @@ -1,57 +0,0 @@ -/* -Copyright 2017 The Kubernetes Authors. - -Licensed under the Apache License, Version 2.0 (the "License"); -you may not use this file except in compliance with the License. -You may obtain a copy of the License at - - http://www.apache.org/licenses/LICENSE-2.0 - -Unless required by applicable law or agreed to in writing, software -distributed under the License is distributed on an "AS IS" BASIS, -WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied. -See the License for the specific language governing permissions and -limitations under the License. -*/ - -package file - -import ( - "os" -) - -// FileExists checks if specified file exists. -func FileExists(filename string) (bool, error) { - if _, err := os.Stat(filename); os.IsNotExist(err) { - return false, nil - } else if err != nil { - return false, err - } - return true, nil -} - -// FileOrSymlinkExists checks if specified file or symlink exists. -func FileOrSymlinkExists(filename string) (bool, error) { - if _, err := os.Lstat(filename); os.IsNotExist(err) { - return false, nil - } else if err != nil { - return false, err - } - return true, nil -} - -// ReadDirNoStat returns a string of files/directories contained -// in dirname without calling lstat on them. -func ReadDirNoStat(dirname string) ([]string, error) { - if dirname == "" { - dirname = "." - } - - f, err := os.Open(dirname) - if err != nil { - return nil, err - } - defer f.Close() - - return f.Readdirnames(-1) -} diff --git a/pkg/util/file/file_test.go b/pkg/util/file/file_test.go deleted file mode 100644 index 43eb2ed1d1..0000000000 --- a/pkg/util/file/file_test.go +++ /dev/null @@ -1,149 +0,0 @@ -/* -Copyright 2017 The Kubernetes Authors. - -Licensed under the Apache License, Version 2.0 (the "License"); -you may not use this file except in compliance with the License. -You may obtain a copy of the License at - - http://www.apache.org/licenses/LICENSE-2.0 - -Unless required by applicable law or agreed to in writing, software -distributed under the License is distributed on an "AS IS" BASIS, -WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied. -See the License for the specific language governing permissions and -limitations under the License. -*/ - -package file - -import ( - "os" - "path/filepath" - "sort" - "testing" - - "github.com/spf13/afero" - "github.com/stretchr/testify/assert" -) - -func RecoverEnv(wd, tmpDir string) { - os.Chdir(wd) - os.RemoveAll(tmpDir) -} - -func TestFileUtils(t *testing.T) { - fs := &afero.Afero{Fs: afero.NewOsFs()} - // Create tmp dir - tmpDir, err := fs.TempDir(os.TempDir(), "util_file_test_") - if err != nil { - t.Fatal("Failed to test: failed to create temp dir.") - } - - // create tmp file - tmpFile, err := fs.TempFile(tmpDir, "test_file_exists_") - if err != nil { - t.Fatal("Failed to test: failed to create temp file.") - } - - // create tmp sym link - tmpSymlinkName := filepath.Join(tmpDir, "test_file_exists_sym_link") - err = os.Symlink(tmpFile.Name(), tmpSymlinkName) - if err != nil { - t.Fatal("Failed to test: failed to create sym link.") - } - - // create tmp sub dir - tmpSubDir, err := fs.TempDir(tmpDir, "sub_") - if err != nil { - t.Fatal("Failed to test: failed to create temp sub dir.") - } - - // record the current dir - currentDir, err := os.Getwd() - if err != nil { - t.Fatal("Failed to test: failed to get current dir.") - } - - // change the work dir to temp dir - err = os.Chdir(tmpDir) - if err != nil { - t.Fatal("Failed to test: failed to change work dir.") - } - - // recover test environment - defer RecoverEnv(currentDir, tmpDir) - - t.Run("TestFileExists", func(t *testing.T) { - tests := []struct { - name string - fileName string - expectedError bool - expectedValue bool - }{ - {"file_not_exists", filepath.Join(tmpDir, "file_not_exist_case"), false, false}, - {"file_exists", tmpFile.Name(), false, true}, - } - - for _, test := range tests { - realValued, realError := FileExists(test.fileName) - if test.expectedError { - assert.Errorf(t, realError, "Failed to test with '%s': %s", test.fileName, test.name) - } else { - assert.EqualValuesf(t, test.expectedValue, realValued, "Failed to test with '%s': %s", test.fileName, test.name) - } - } - }) - - t.Run("TestFileOrSymlinkExists", func(t *testing.T) { - tests := []struct { - name string - fileName string - expectedError bool - expectedValue bool - }{ - {"file_not_exists", filepath.Join(tmpDir, "file_not_exist_case"), false, false}, - {"file_exists", tmpFile.Name(), false, true}, - {"symlink_exists", tmpSymlinkName, false, true}, - } - - for _, test := range tests { - realValued, realError := FileOrSymlinkExists(test.fileName) - if test.expectedError { - assert.Errorf(t, realError, "Failed to test with '%s': %s", test.fileName, test.name) - } else { - assert.EqualValuesf(t, test.expectedValue, realValued, "Failed to test with '%s': %s", test.fileName, test.name) - } - } - }) - - t.Run("TestReadDirNoStat", func(t *testing.T) { - _, tmpFileSimpleName := filepath.Split(tmpFile.Name()) - _, tmpSymlinkSimpleName := filepath.Split(tmpSymlinkName) - _, tmpSubDirSimpleName := filepath.Split(tmpSubDir) - - tests := []struct { - name string - dirName string - expectedError bool - expectedValue []string - }{ - {"dir_not_exists", filepath.Join(tmpDir, "file_not_exist_case"), true, []string{}}, - {"dir_is_empty", "", false, []string{tmpFileSimpleName, tmpSymlinkSimpleName, tmpSubDirSimpleName}}, - {"dir_exists", tmpDir, false, []string{tmpFileSimpleName, tmpSymlinkSimpleName, tmpSubDirSimpleName}}, - } - - for _, test := range tests { - realValued, realError := ReadDirNoStat(test.dirName) - - // execute sort action before compare - sort.Strings(realValued) - sort.Strings(test.expectedValue) - - if test.expectedError { - assert.Errorf(t, realError, "Failed to test with '%s': %s", test.dirName, test.name) - } else { - assert.EqualValuesf(t, test.expectedValue, realValued, "Failed to test with '%s': %s", test.dirName, test.name) - } - } - }) -} diff --git a/pkg/util/mount/BUILD b/pkg/util/mount/BUILD index 60998c1d22..d2eae31ed0 100644 --- a/pkg/util/mount/BUILD +++ b/pkg/util/mount/BUILD @@ -35,11 +35,11 @@ go_library( "//vendor/k8s.io/utils/nsenter:go_default_library", ], "@io_bazel_rules_go//go/platform:linux": [ - "//pkg/util/file:go_default_library", "//staging/src/k8s.io/apimachinery/pkg/util/sets:go_default_library", "//vendor/golang.org/x/sys/unix:go_default_library", "//vendor/k8s.io/utils/io:go_default_library", "//vendor/k8s.io/utils/nsenter:go_default_library", + "//vendor/k8s.io/utils/path:go_default_library", ], "@io_bazel_rules_go//go/platform:nacl": [ "//vendor/k8s.io/utils/nsenter:go_default_library", @@ -57,8 +57,8 @@ go_library( "//vendor/k8s.io/utils/nsenter:go_default_library", ], "@io_bazel_rules_go//go/platform:windows": [ - "//pkg/util/file:go_default_library", "//vendor/k8s.io/utils/nsenter:go_default_library", + "//vendor/k8s.io/utils/path:go_default_library", ], "//conditions:default": [], }), diff --git a/pkg/util/mount/mount_linux.go b/pkg/util/mount/mount_linux.go index b0ef01bae4..c66039e5e0 100644 --- a/pkg/util/mount/mount_linux.go +++ b/pkg/util/mount/mount_linux.go @@ -33,9 +33,9 @@ import ( "golang.org/x/sys/unix" "k8s.io/apimachinery/pkg/util/sets" "k8s.io/klog" - utilfile "k8s.io/kubernetes/pkg/util/file" utilexec "k8s.io/utils/exec" utilio "k8s.io/utils/io" + utilpath "k8s.io/utils/path" ) const ( @@ -417,7 +417,7 @@ func (mounter *Mounter) MakeFile(pathname string) error { } func (mounter *Mounter) ExistsPath(pathname string) (bool, error) { - return utilfile.FileExists(pathname) + return utilpath.Exists(utilpath.CheckFollowSymlink, pathname) } func (mounter *Mounter) EvalHostSymlinks(pathname string) (string, error) { diff --git a/pkg/util/mount/mount_windows.go b/pkg/util/mount/mount_windows.go index f4508c5227..89d09c45ab 100644 --- a/pkg/util/mount/mount_windows.go +++ b/pkg/util/mount/mount_windows.go @@ -30,7 +30,7 @@ import ( "k8s.io/klog" - utilfile "k8s.io/kubernetes/pkg/util/file" + utilpath "k8s.io/utils/path" ) // Mounter provides the default implementation of mount.Interface @@ -235,7 +235,7 @@ func (mounter *Mounter) MakeFile(pathname string) error { // ExistsPath checks whether the path exists func (mounter *Mounter) ExistsPath(pathname string) (bool, error) { - return utilfile.FileExists(pathname) + return utilpath.Exists(utilpath.CheckFollowSymlink, pathname) } // EvalHostSymlinks returns the path name after evaluating symlinks diff --git a/pkg/util/mount/nsenter_mount.go b/pkg/util/mount/nsenter_mount.go index e77ee6f75f..ce5d825da7 100644 --- a/pkg/util/mount/nsenter_mount.go +++ b/pkg/util/mount/nsenter_mount.go @@ -27,8 +27,8 @@ import ( "golang.org/x/sys/unix" "k8s.io/klog" - utilfile "k8s.io/kubernetes/pkg/util/file" "k8s.io/utils/nsenter" + utilpath "k8s.io/utils/path" ) const ( @@ -291,7 +291,7 @@ func (mounter *NsenterMounter) ExistsPath(pathname string) (bool, error) { return false, err } kubeletpath := mounter.ne.KubeletPath(hostPath) - return utilfile.FileExists(kubeletpath) + return utilpath.Exists(utilpath.CheckFollowSymlink, kubeletpath) } func (mounter *NsenterMounter) EvalHostSymlinks(pathname string) (string, error) { diff --git a/pkg/volume/gcepd/BUILD b/pkg/volume/gcepd/BUILD index 938b575733..42ec285363 100644 --- a/pkg/volume/gcepd/BUILD +++ b/pkg/volume/gcepd/BUILD @@ -20,7 +20,6 @@ go_library( "//pkg/cloudprovider/providers/gce:go_default_library", "//pkg/features:go_default_library", "//pkg/kubelet/apis:go_default_library", - "//pkg/util/file:go_default_library", "//pkg/util/mount:go_default_library", "//pkg/util/strings:go_default_library", "//pkg/volume:go_default_library", @@ -35,6 +34,7 @@ go_library( "//staging/src/k8s.io/cloud-provider:go_default_library", "//vendor/k8s.io/klog:go_default_library", "//vendor/k8s.io/utils/exec:go_default_library", + "//vendor/k8s.io/utils/path:go_default_library", ], ) diff --git a/pkg/volume/gcepd/gce_util.go b/pkg/volume/gcepd/gce_util.go index d0e13a8ddf..0d7e2126e2 100644 --- a/pkg/volume/gcepd/gce_util.go +++ b/pkg/volume/gcepd/gce_util.go @@ -32,11 +32,11 @@ import ( gcecloud "k8s.io/kubernetes/pkg/cloudprovider/providers/gce" "k8s.io/kubernetes/pkg/features" kubeletapis "k8s.io/kubernetes/pkg/kubelet/apis" - utilfile "k8s.io/kubernetes/pkg/util/file" "k8s.io/kubernetes/pkg/util/mount" "k8s.io/kubernetes/pkg/volume" volumeutil "k8s.io/kubernetes/pkg/volume/util" "k8s.io/utils/exec" + utilpath "k8s.io/utils/path" ) const ( @@ -236,7 +236,7 @@ func verifyDevicePath(devicePaths []string, sdBeforeSet sets.String, diskName st // Calls scsi_id on the given devicePath to get the serial number reported by that device. func getScsiSerial(devicePath, diskName string) (string, error) { - exists, err := utilfile.FileExists("/lib/udev/scsi_id") + exists, err := utilpath.Exists(utilpath.CheckFollowSymlink, "/lib/udev/scsi_id") if err != nil { return "", fmt.Errorf("failed to check scsi_id existence: %v", err) } diff --git a/pkg/volume/host_path/BUILD b/pkg/volume/host_path/BUILD index b05d42c64b..0c961173ba 100644 --- a/pkg/volume/host_path/BUILD +++ b/pkg/volume/host_path/BUILD @@ -31,7 +31,6 @@ go_test( srcs = ["host_path_test.go"], embed = [":go_default_library"], deps = [ - "//pkg/util/file:go_default_library", "//pkg/util/mount:go_default_library", "//pkg/volume:go_default_library", "//pkg/volume/testing:go_default_library", @@ -41,6 +40,7 @@ go_test( "//staging/src/k8s.io/apimachinery/pkg/types:go_default_library", "//staging/src/k8s.io/apimachinery/pkg/util/uuid:go_default_library", "//staging/src/k8s.io/client-go/kubernetes/fake:go_default_library", + "//vendor/k8s.io/utils/path:go_default_library", ], ) diff --git a/pkg/volume/host_path/host_path_test.go b/pkg/volume/host_path/host_path_test.go index f29e159947..16c6697b64 100644 --- a/pkg/volume/host_path/host_path_test.go +++ b/pkg/volume/host_path/host_path_test.go @@ -27,10 +27,10 @@ import ( "k8s.io/apimachinery/pkg/types" "k8s.io/apimachinery/pkg/util/uuid" "k8s.io/client-go/kubernetes/fake" - utilfile "k8s.io/kubernetes/pkg/util/file" utilmount "k8s.io/kubernetes/pkg/util/mount" "k8s.io/kubernetes/pkg/volume" volumetest "k8s.io/kubernetes/pkg/volume/testing" + utilpath "k8s.io/utils/path" ) func newHostPathType(pathType string) *v1.HostPathType { @@ -122,7 +122,7 @@ func TestDeleter(t *testing.T) { if err := deleter.Delete(); err != nil { t.Errorf("Mock Recycler expected to return nil but got %s", err) } - if exists, _ := utilfile.FileExists(tempPath); exists { + if exists, _ := utilpath.Exists(utilpath.CheckFollowSymlink, tempPath); exists { t.Errorf("Temp path expected to be deleted, but was found at %s", tempPath) } } diff --git a/pkg/volume/rbd/BUILD b/pkg/volume/rbd/BUILD index ccd413eefe..a6f62a681b 100644 --- a/pkg/volume/rbd/BUILD +++ b/pkg/volume/rbd/BUILD @@ -18,7 +18,6 @@ go_library( importpath = "k8s.io/kubernetes/pkg/volume/rbd", deps = [ "//pkg/features:go_default_library", - "//pkg/util/file:go_default_library", "//pkg/util/mount:go_default_library", "//pkg/util/node:go_default_library", "//pkg/util/strings:go_default_library", @@ -36,6 +35,7 @@ go_library( "//staging/src/k8s.io/apiserver/pkg/util/feature:go_default_library", "//staging/src/k8s.io/client-go/kubernetes:go_default_library", "//vendor/k8s.io/klog:go_default_library", + "//vendor/k8s.io/utils/path:go_default_library", ], ) diff --git a/pkg/volume/rbd/rbd_util.go b/pkg/volume/rbd/rbd_util.go index a4afb51860..613987279f 100644 --- a/pkg/volume/rbd/rbd_util.go +++ b/pkg/volume/rbd/rbd_util.go @@ -37,11 +37,11 @@ import ( "k8s.io/apimachinery/pkg/util/errors" "k8s.io/apimachinery/pkg/util/wait" "k8s.io/klog" - fileutil "k8s.io/kubernetes/pkg/util/file" "k8s.io/kubernetes/pkg/util/mount" "k8s.io/kubernetes/pkg/util/node" "k8s.io/kubernetes/pkg/volume" volutil "k8s.io/kubernetes/pkg/volume/util" + utilpath "k8s.io/utils/path" ) const ( @@ -486,7 +486,7 @@ func (util *RBDUtil) DetachDisk(plugin *rbdPlugin, deviceMountPath string, devic // Currently, we don't persist rbd info on the disk, but for backward // compatbility, we need to clean it if found. rbdFile := path.Join(deviceMountPath, "rbd.json") - exists, err := fileutil.FileExists(rbdFile) + exists, err := utilpath.Exists(utilpath.CheckFollowSymlink, rbdFile) if err != nil { return err } From bdbef741d1fc03e77ccd5c84796cbd74293eb7d0 Mon Sep 17 00:00:00 2001 From: Andrew Kim Date: Tue, 29 Jan 2019 15:20:07 -0500 Subject: [PATCH 3/3] remove usgae of NSEnterExecutor --- cmd/kubelet/app/server.go | 5 ++++- 1 file changed, 4 insertions(+), 1 deletion(-) diff --git a/cmd/kubelet/app/server.go b/cmd/kubelet/app/server.go index bedd78500b..e932f68947 100644 --- a/cmd/kubelet/app/server.go +++ b/cmd/kubelet/app/server.go @@ -369,7 +369,10 @@ func UnsecuredDependencies(s *options.KubeletServer) (*kubelet.Dependencies, err } mounter = mount.NewNsenterMounter(s.RootDirectory, ne) // an exec interface which can use nsenter for flex plugin calls - pluginRunner = nsenter.NewNsenterExecutor(nsenter.DefaultHostRootFsPath, exec.New()) + pluginRunner, err = nsenter.NewNsenter(nsenter.DefaultHostRootFsPath, exec.New()) + if err != nil { + return nil, err + } } var dockerClientConfig *dockershim.ClientConfig