mirror of
				https://github.com/optim-enterprises-bv/kubernetes.git
				synced 2025-11-04 04:08:16 +00:00 
			
		
		
		
	Merge pull request #49234 from mengqiy/master
Automatic merge from submit-queue (batch tested with PRs 49107, 47177, 49234, 49224, 49227) Move util/exec to vendor Move util/exec to vendor. Update import paths. Update godep Part of #48209 Associate PR against `k8s.io/utils` repo: https://github.com/kubernetes/utils/pull/5 ```release-note NONE ``` /assign @apelisse
This commit is contained in:
		
							
								
								
									
										41
									
								
								Godeps/Godeps.json
									
									
									
										generated
									
									
									
								
							
							
						
						
									
										41
									
								
								Godeps/Godeps.json
									
									
									
										generated
									
									
									
								
							@@ -2147,82 +2147,82 @@
 | 
			
		||||
		},
 | 
			
		||||
		{
 | 
			
		||||
			"ImportPath": "github.com/opencontainers/runc/libcontainer",
 | 
			
		||||
			"Comment": "v1.0.0-rc2-49-gd223e2a",
 | 
			
		||||
			"Comment": "v1.0.0-rc2-49-gd223e2ad",
 | 
			
		||||
			"Rev": "d223e2adae83f62d58448a799a5da05730228089"
 | 
			
		||||
		},
 | 
			
		||||
		{
 | 
			
		||||
			"ImportPath": "github.com/opencontainers/runc/libcontainer/apparmor",
 | 
			
		||||
			"Comment": "v1.0.0-rc2-49-gd223e2a",
 | 
			
		||||
			"Comment": "v1.0.0-rc2-49-gd223e2ad",
 | 
			
		||||
			"Rev": "d223e2adae83f62d58448a799a5da05730228089"
 | 
			
		||||
		},
 | 
			
		||||
		{
 | 
			
		||||
			"ImportPath": "github.com/opencontainers/runc/libcontainer/cgroups",
 | 
			
		||||
			"Comment": "v1.0.0-rc2-49-gd223e2a",
 | 
			
		||||
			"Comment": "v1.0.0-rc2-49-gd223e2ad",
 | 
			
		||||
			"Rev": "d223e2adae83f62d58448a799a5da05730228089"
 | 
			
		||||
		},
 | 
			
		||||
		{
 | 
			
		||||
			"ImportPath": "github.com/opencontainers/runc/libcontainer/cgroups/fs",
 | 
			
		||||
			"Comment": "v1.0.0-rc2-49-gd223e2a",
 | 
			
		||||
			"Comment": "v1.0.0-rc2-49-gd223e2ad",
 | 
			
		||||
			"Rev": "d223e2adae83f62d58448a799a5da05730228089"
 | 
			
		||||
		},
 | 
			
		||||
		{
 | 
			
		||||
			"ImportPath": "github.com/opencontainers/runc/libcontainer/cgroups/systemd",
 | 
			
		||||
			"Comment": "v1.0.0-rc2-49-gd223e2a",
 | 
			
		||||
			"Comment": "v1.0.0-rc2-49-gd223e2ad",
 | 
			
		||||
			"Rev": "d223e2adae83f62d58448a799a5da05730228089"
 | 
			
		||||
		},
 | 
			
		||||
		{
 | 
			
		||||
			"ImportPath": "github.com/opencontainers/runc/libcontainer/configs",
 | 
			
		||||
			"Comment": "v1.0.0-rc2-49-gd223e2a",
 | 
			
		||||
			"Comment": "v1.0.0-rc2-49-gd223e2ad",
 | 
			
		||||
			"Rev": "d223e2adae83f62d58448a799a5da05730228089"
 | 
			
		||||
		},
 | 
			
		||||
		{
 | 
			
		||||
			"ImportPath": "github.com/opencontainers/runc/libcontainer/configs/validate",
 | 
			
		||||
			"Comment": "v1.0.0-rc2-49-gd223e2a",
 | 
			
		||||
			"Comment": "v1.0.0-rc2-49-gd223e2ad",
 | 
			
		||||
			"Rev": "d223e2adae83f62d58448a799a5da05730228089"
 | 
			
		||||
		},
 | 
			
		||||
		{
 | 
			
		||||
			"ImportPath": "github.com/opencontainers/runc/libcontainer/criurpc",
 | 
			
		||||
			"Comment": "v1.0.0-rc2-49-gd223e2a",
 | 
			
		||||
			"Comment": "v1.0.0-rc2-49-gd223e2ad",
 | 
			
		||||
			"Rev": "d223e2adae83f62d58448a799a5da05730228089"
 | 
			
		||||
		},
 | 
			
		||||
		{
 | 
			
		||||
			"ImportPath": "github.com/opencontainers/runc/libcontainer/keys",
 | 
			
		||||
			"Comment": "v1.0.0-rc2-49-gd223e2a",
 | 
			
		||||
			"Comment": "v1.0.0-rc2-49-gd223e2ad",
 | 
			
		||||
			"Rev": "d223e2adae83f62d58448a799a5da05730228089"
 | 
			
		||||
		},
 | 
			
		||||
		{
 | 
			
		||||
			"ImportPath": "github.com/opencontainers/runc/libcontainer/label",
 | 
			
		||||
			"Comment": "v1.0.0-rc2-49-gd223e2a",
 | 
			
		||||
			"Comment": "v1.0.0-rc2-49-gd223e2ad",
 | 
			
		||||
			"Rev": "d223e2adae83f62d58448a799a5da05730228089"
 | 
			
		||||
		},
 | 
			
		||||
		{
 | 
			
		||||
			"ImportPath": "github.com/opencontainers/runc/libcontainer/seccomp",
 | 
			
		||||
			"Comment": "v1.0.0-rc2-49-gd223e2a",
 | 
			
		||||
			"Comment": "v1.0.0-rc2-49-gd223e2ad",
 | 
			
		||||
			"Rev": "d223e2adae83f62d58448a799a5da05730228089"
 | 
			
		||||
		},
 | 
			
		||||
		{
 | 
			
		||||
			"ImportPath": "github.com/opencontainers/runc/libcontainer/selinux",
 | 
			
		||||
			"Comment": "v1.0.0-rc2-49-gd223e2a",
 | 
			
		||||
			"Comment": "v1.0.0-rc2-49-gd223e2ad",
 | 
			
		||||
			"Rev": "d223e2adae83f62d58448a799a5da05730228089"
 | 
			
		||||
		},
 | 
			
		||||
		{
 | 
			
		||||
			"ImportPath": "github.com/opencontainers/runc/libcontainer/stacktrace",
 | 
			
		||||
			"Comment": "v1.0.0-rc2-49-gd223e2a",
 | 
			
		||||
			"Comment": "v1.0.0-rc2-49-gd223e2ad",
 | 
			
		||||
			"Rev": "d223e2adae83f62d58448a799a5da05730228089"
 | 
			
		||||
		},
 | 
			
		||||
		{
 | 
			
		||||
			"ImportPath": "github.com/opencontainers/runc/libcontainer/system",
 | 
			
		||||
			"Comment": "v1.0.0-rc2-49-gd223e2a",
 | 
			
		||||
			"Comment": "v1.0.0-rc2-49-gd223e2ad",
 | 
			
		||||
			"Rev": "d223e2adae83f62d58448a799a5da05730228089"
 | 
			
		||||
		},
 | 
			
		||||
		{
 | 
			
		||||
			"ImportPath": "github.com/opencontainers/runc/libcontainer/user",
 | 
			
		||||
			"Comment": "v1.0.0-rc2-49-gd223e2a",
 | 
			
		||||
			"Comment": "v1.0.0-rc2-49-gd223e2ad",
 | 
			
		||||
			"Rev": "d223e2adae83f62d58448a799a5da05730228089"
 | 
			
		||||
		},
 | 
			
		||||
		{
 | 
			
		||||
			"ImportPath": "github.com/opencontainers/runc/libcontainer/utils",
 | 
			
		||||
			"Comment": "v1.0.0-rc2-49-gd223e2a",
 | 
			
		||||
			"Comment": "v1.0.0-rc2-49-gd223e2ad",
 | 
			
		||||
			"Rev": "d223e2adae83f62d58448a799a5da05730228089"
 | 
			
		||||
		},
 | 
			
		||||
		{
 | 
			
		||||
@@ -2231,6 +2231,7 @@
 | 
			
		||||
		},
 | 
			
		||||
		{
 | 
			
		||||
			"ImportPath": "github.com/pelletier/go-buffruneio",
 | 
			
		||||
			"Comment": "v0.1.0",
 | 
			
		||||
			"Rev": "df1e16fde7fc330a0ca68167c23bf7ed6ac31d6d"
 | 
			
		||||
		},
 | 
			
		||||
		{
 | 
			
		||||
@@ -3027,6 +3028,14 @@
 | 
			
		||||
			"Comment": "v1.2.0-beta.1",
 | 
			
		||||
			"Rev": "c2ac40f1adf8c42a79badddb2a2acd673cae3bcb"
 | 
			
		||||
		},
 | 
			
		||||
		{
 | 
			
		||||
			"ImportPath": "k8s.io/utils/exec",
 | 
			
		||||
			"Rev": "9fdc871a36f37980dd85f96d576b20d564cc0784"
 | 
			
		||||
		},
 | 
			
		||||
		{
 | 
			
		||||
			"ImportPath": "k8s.io/utils/exec/testing",
 | 
			
		||||
			"Rev": "9fdc871a36f37980dd85f96d576b20d564cc0784"
 | 
			
		||||
		},
 | 
			
		||||
		{
 | 
			
		||||
			"ImportPath": "vbom.ml/util/sortorder",
 | 
			
		||||
			"Rev": "db5cfe13f5cc80a4990d98e2e1b0707a4d1a5394"
 | 
			
		||||
 
 | 
			
		||||
							
								
								
									
										420
									
								
								Godeps/LICENSES
									
									
									
										generated
									
									
									
								
							
							
						
						
									
										420
									
								
								Godeps/LICENSES
									
									
									
										generated
									
									
									
								
							@@ -90143,6 +90143,426 @@ Apache License
 | 
			
		||||
================================================================================
 | 
			
		||||
 | 
			
		||||
 | 
			
		||||
================================================================================
 | 
			
		||||
= vendor/k8s.io/utils/exec 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/exec/testing 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/vbom.ml/util/sortorder licensed under: =
 | 
			
		||||
 | 
			
		||||
 
 | 
			
		||||
@@ -32,7 +32,6 @@ go_library(
 | 
			
		||||
        "//pkg/proxy/winuserspace:go_default_library",
 | 
			
		||||
        "//pkg/util/configz:go_default_library",
 | 
			
		||||
        "//pkg/util/dbus:go_default_library",
 | 
			
		||||
        "//pkg/util/exec:go_default_library",
 | 
			
		||||
        "//pkg/util/iptables:go_default_library",
 | 
			
		||||
        "//pkg/util/mount:go_default_library",
 | 
			
		||||
        "//pkg/util/netsh:go_default_library",
 | 
			
		||||
@@ -62,6 +61,7 @@ go_library(
 | 
			
		||||
        "//vendor/k8s.io/client-go/tools/clientcmd:go_default_library",
 | 
			
		||||
        "//vendor/k8s.io/client-go/tools/clientcmd/api:go_default_library",
 | 
			
		||||
        "//vendor/k8s.io/client-go/tools/record:go_default_library",
 | 
			
		||||
        "//vendor/k8s.io/utils/exec:go_default_library",
 | 
			
		||||
    ],
 | 
			
		||||
)
 | 
			
		||||
 | 
			
		||||
 
 | 
			
		||||
@@ -62,7 +62,6 @@ import (
 | 
			
		||||
	"k8s.io/kubernetes/pkg/proxy/winuserspace"
 | 
			
		||||
	"k8s.io/kubernetes/pkg/util/configz"
 | 
			
		||||
	utildbus "k8s.io/kubernetes/pkg/util/dbus"
 | 
			
		||||
	"k8s.io/kubernetes/pkg/util/exec"
 | 
			
		||||
	utiliptables "k8s.io/kubernetes/pkg/util/iptables"
 | 
			
		||||
	utilnetsh "k8s.io/kubernetes/pkg/util/netsh"
 | 
			
		||||
	utilnode "k8s.io/kubernetes/pkg/util/node"
 | 
			
		||||
@@ -71,6 +70,7 @@ import (
 | 
			
		||||
	"k8s.io/kubernetes/pkg/util/resourcecontainer"
 | 
			
		||||
	utilsysctl "k8s.io/kubernetes/pkg/util/sysctl"
 | 
			
		||||
	"k8s.io/kubernetes/pkg/version/verflag"
 | 
			
		||||
	"k8s.io/utils/exec"
 | 
			
		||||
 | 
			
		||||
	"github.com/golang/glog"
 | 
			
		||||
	"github.com/prometheus/client_golang/prometheus"
 | 
			
		||||
 
 | 
			
		||||
@@ -26,7 +26,6 @@ go_library(
 | 
			
		||||
        "//pkg/kubelet/cm:go_default_library",
 | 
			
		||||
        "//pkg/kubelet/dockershim/libdocker:go_default_library",
 | 
			
		||||
        "//pkg/kubemark:go_default_library",
 | 
			
		||||
        "//pkg/util/exec:go_default_library",
 | 
			
		||||
        "//pkg/util/iptables/testing:go_default_library",
 | 
			
		||||
        "//pkg/util/sysctl/testing:go_default_library",
 | 
			
		||||
        "//pkg/version/prometheus:go_default_library",
 | 
			
		||||
@@ -39,6 +38,7 @@ go_library(
 | 
			
		||||
        "//vendor/k8s.io/client-go/rest:go_default_library",
 | 
			
		||||
        "//vendor/k8s.io/client-go/tools/clientcmd:go_default_library",
 | 
			
		||||
        "//vendor/k8s.io/client-go/tools/record:go_default_library",
 | 
			
		||||
        "//vendor/k8s.io/utils/exec/testing:go_default_library",
 | 
			
		||||
    ],
 | 
			
		||||
)
 | 
			
		||||
 | 
			
		||||
 
 | 
			
		||||
@@ -34,10 +34,10 @@ import (
 | 
			
		||||
	"k8s.io/kubernetes/pkg/kubelet/cm"
 | 
			
		||||
	"k8s.io/kubernetes/pkg/kubelet/dockershim/libdocker"
 | 
			
		||||
	"k8s.io/kubernetes/pkg/kubemark"
 | 
			
		||||
	fakeexec "k8s.io/kubernetes/pkg/util/exec"
 | 
			
		||||
	fakeiptables "k8s.io/kubernetes/pkg/util/iptables/testing"
 | 
			
		||||
	fakesysctl "k8s.io/kubernetes/pkg/util/sysctl/testing"
 | 
			
		||||
	_ "k8s.io/kubernetes/pkg/version/prometheus" // for version metric registration
 | 
			
		||||
	fakeexec "k8s.io/utils/exec/testing"
 | 
			
		||||
 | 
			
		||||
	"github.com/golang/glog"
 | 
			
		||||
	"github.com/spf13/pflag"
 | 
			
		||||
 
 | 
			
		||||
@@ -428,7 +428,6 @@ pkg/util/configz
 | 
			
		||||
pkg/util/dbus
 | 
			
		||||
pkg/util/ebtables
 | 
			
		||||
pkg/util/env
 | 
			
		||||
pkg/util/exec
 | 
			
		||||
pkg/util/file
 | 
			
		||||
pkg/util/goroutinemap/exponentialbackoff
 | 
			
		||||
pkg/util/initsystem
 | 
			
		||||
 
 | 
			
		||||
@@ -26,7 +26,6 @@ go_library(
 | 
			
		||||
        "//pkg/api/v1/service:go_default_library",
 | 
			
		||||
        "//pkg/cloudprovider:go_default_library",
 | 
			
		||||
        "//pkg/controller:go_default_library",
 | 
			
		||||
        "//pkg/util/exec:go_default_library",
 | 
			
		||||
        "//pkg/util/mount:go_default_library",
 | 
			
		||||
        "//pkg/volume:go_default_library",
 | 
			
		||||
        "//vendor/github.com/golang/glog:go_default_library",
 | 
			
		||||
@@ -62,6 +61,7 @@ go_library(
 | 
			
		||||
        "//vendor/k8s.io/apimachinery/pkg/util/net:go_default_library",
 | 
			
		||||
        "//vendor/k8s.io/apimachinery/pkg/util/wait:go_default_library",
 | 
			
		||||
        "//vendor/k8s.io/client-go/util/cert:go_default_library",
 | 
			
		||||
        "//vendor/k8s.io/utils/exec:go_default_library",
 | 
			
		||||
    ],
 | 
			
		||||
)
 | 
			
		||||
 | 
			
		||||
 
 | 
			
		||||
@@ -28,8 +28,8 @@ import (
 | 
			
		||||
	"strings"
 | 
			
		||||
 | 
			
		||||
	"github.com/golang/glog"
 | 
			
		||||
	"k8s.io/kubernetes/pkg/util/exec"
 | 
			
		||||
	"k8s.io/kubernetes/pkg/util/mount"
 | 
			
		||||
	"k8s.io/utils/exec"
 | 
			
		||||
)
 | 
			
		||||
 | 
			
		||||
// metadataUrl is URL to OpenStack metadata server. It's hardcoded IPv4
 | 
			
		||||
 
 | 
			
		||||
@@ -97,7 +97,6 @@ go_library(
 | 
			
		||||
        "//pkg/kubectl/util/term:go_default_library",
 | 
			
		||||
        "//pkg/printers:go_default_library",
 | 
			
		||||
        "//pkg/printers/internalversion:go_default_library",
 | 
			
		||||
        "//pkg/util/exec:go_default_library",
 | 
			
		||||
        "//pkg/util/i18n:go_default_library",
 | 
			
		||||
        "//pkg/util/interrupt:go_default_library",
 | 
			
		||||
        "//pkg/util/taints:go_default_library",
 | 
			
		||||
@@ -145,6 +144,7 @@ go_library(
 | 
			
		||||
        "//vendor/k8s.io/client-go/tools/portforward:go_default_library",
 | 
			
		||||
        "//vendor/k8s.io/client-go/tools/remotecommand:go_default_library",
 | 
			
		||||
        "//vendor/k8s.io/client-go/transport/spdy:go_default_library",
 | 
			
		||||
        "//vendor/k8s.io/utils/exec:go_default_library",
 | 
			
		||||
    ],
 | 
			
		||||
)
 | 
			
		||||
 | 
			
		||||
 
 | 
			
		||||
@@ -40,9 +40,9 @@ import (
 | 
			
		||||
	"k8s.io/kubernetes/pkg/kubectl/cmd/templates"
 | 
			
		||||
	cmdutil "k8s.io/kubernetes/pkg/kubectl/cmd/util"
 | 
			
		||||
	"k8s.io/kubernetes/pkg/kubectl/resource"
 | 
			
		||||
	uexec "k8s.io/kubernetes/pkg/util/exec"
 | 
			
		||||
	"k8s.io/kubernetes/pkg/util/i18n"
 | 
			
		||||
	"k8s.io/kubernetes/pkg/util/interrupt"
 | 
			
		||||
	uexec "k8s.io/utils/exec"
 | 
			
		||||
)
 | 
			
		||||
 | 
			
		||||
var (
 | 
			
		||||
 
 | 
			
		||||
@@ -42,7 +42,6 @@ go_library(
 | 
			
		||||
        "//pkg/kubectl/resource:go_default_library",
 | 
			
		||||
        "//pkg/printers:go_default_library",
 | 
			
		||||
        "//pkg/printers/internalversion:go_default_library",
 | 
			
		||||
        "//pkg/util/exec:go_default_library",
 | 
			
		||||
        "//pkg/version:go_default_library",
 | 
			
		||||
        "//vendor/github.com/emicklei/go-restful-swagger12:go_default_library",
 | 
			
		||||
        "//vendor/github.com/evanphx/json-patch:go_default_library",
 | 
			
		||||
@@ -73,6 +72,7 @@ go_library(
 | 
			
		||||
        "//vendor/k8s.io/client-go/rest:go_default_library",
 | 
			
		||||
        "//vendor/k8s.io/client-go/tools/clientcmd:go_default_library",
 | 
			
		||||
        "//vendor/k8s.io/client-go/util/homedir:go_default_library",
 | 
			
		||||
        "//vendor/k8s.io/utils/exec:go_default_library",
 | 
			
		||||
    ],
 | 
			
		||||
)
 | 
			
		||||
 | 
			
		||||
@@ -106,7 +106,6 @@ go_test(
 | 
			
		||||
        "//pkg/controller:go_default_library",
 | 
			
		||||
        "//pkg/kubectl:go_default_library",
 | 
			
		||||
        "//pkg/kubectl/resource:go_default_library",
 | 
			
		||||
        "//pkg/util/exec:go_default_library",
 | 
			
		||||
        "//vendor/github.com/emicklei/go-restful-swagger12:go_default_library",
 | 
			
		||||
        "//vendor/github.com/googleapis/gnostic/OpenAPIv2:go_default_library",
 | 
			
		||||
        "//vendor/github.com/stretchr/testify/assert:go_default_library",
 | 
			
		||||
@@ -129,6 +128,7 @@ go_test(
 | 
			
		||||
        "//vendor/k8s.io/client-go/testing:go_default_library",
 | 
			
		||||
        "//vendor/k8s.io/client-go/tools/clientcmd:go_default_library",
 | 
			
		||||
        "//vendor/k8s.io/client-go/tools/clientcmd/api:go_default_library",
 | 
			
		||||
        "//vendor/k8s.io/utils/exec:go_default_library",
 | 
			
		||||
    ],
 | 
			
		||||
)
 | 
			
		||||
 | 
			
		||||
 
 | 
			
		||||
@@ -48,7 +48,7 @@ import (
 | 
			
		||||
	"k8s.io/kubernetes/pkg/kubectl"
 | 
			
		||||
	"k8s.io/kubernetes/pkg/kubectl/resource"
 | 
			
		||||
	"k8s.io/kubernetes/pkg/printers"
 | 
			
		||||
	utilexec "k8s.io/kubernetes/pkg/util/exec"
 | 
			
		||||
	utilexec "k8s.io/utils/exec"
 | 
			
		||||
)
 | 
			
		||||
 | 
			
		||||
const (
 | 
			
		||||
 
 | 
			
		||||
@@ -35,7 +35,7 @@ import (
 | 
			
		||||
	"k8s.io/kubernetes/pkg/api"
 | 
			
		||||
	"k8s.io/kubernetes/pkg/api/testapi"
 | 
			
		||||
	apitesting "k8s.io/kubernetes/pkg/api/testing"
 | 
			
		||||
	uexec "k8s.io/kubernetes/pkg/util/exec"
 | 
			
		||||
	"k8s.io/utils/exec"
 | 
			
		||||
)
 | 
			
		||||
 | 
			
		||||
func TestMerge(t *testing.T) {
 | 
			
		||||
@@ -266,7 +266,7 @@ func TestCheckNoResourceMatchError(t *testing.T) {
 | 
			
		||||
func TestCheckExitError(t *testing.T) {
 | 
			
		||||
	testCheckError(t, []checkErrTestCase{
 | 
			
		||||
		{
 | 
			
		||||
			uexec.CodeExitError{Err: fmt.Errorf("pod foo/bar terminated"), Code: 42},
 | 
			
		||||
			exec.CodeExitError{Err: fmt.Errorf("pod foo/bar terminated"), Code: 42},
 | 
			
		||||
			"pod foo/bar terminated",
 | 
			
		||||
			42,
 | 
			
		||||
		},
 | 
			
		||||
 
 | 
			
		||||
@@ -93,7 +93,6 @@ go_library(
 | 
			
		||||
        "//pkg/security/apparmor:go_default_library",
 | 
			
		||||
        "//pkg/securitycontext:go_default_library",
 | 
			
		||||
        "//pkg/util/dbus:go_default_library",
 | 
			
		||||
        "//pkg/util/exec:go_default_library",
 | 
			
		||||
        "//pkg/util/file:go_default_library",
 | 
			
		||||
        "//pkg/util/io:go_default_library",
 | 
			
		||||
        "//pkg/util/iptables:go_default_library",
 | 
			
		||||
@@ -141,6 +140,7 @@ go_library(
 | 
			
		||||
        "//vendor/k8s.io/client-go/tools/remotecommand:go_default_library",
 | 
			
		||||
        "//vendor/k8s.io/client-go/util/flowcontrol:go_default_library",
 | 
			
		||||
        "//vendor/k8s.io/client-go/util/integer:go_default_library",
 | 
			
		||||
        "//vendor/k8s.io/utils/exec:go_default_library",
 | 
			
		||||
    ],
 | 
			
		||||
)
 | 
			
		||||
 | 
			
		||||
 
 | 
			
		||||
@@ -51,7 +51,6 @@ go_library(
 | 
			
		||||
        "//pkg/kubelet/util/cache:go_default_library",
 | 
			
		||||
        "//pkg/kubelet/util/ioutils:go_default_library",
 | 
			
		||||
        "//pkg/security/apparmor:go_default_library",
 | 
			
		||||
        "//pkg/util/exec:go_default_library",
 | 
			
		||||
        "//pkg/util/hash:go_default_library",
 | 
			
		||||
        "//pkg/util/term:go_default_library",
 | 
			
		||||
        "//vendor/github.com/blang/semver:go_default_library",
 | 
			
		||||
@@ -68,6 +67,7 @@ go_library(
 | 
			
		||||
        "//vendor/k8s.io/apimachinery/pkg/util/sets:go_default_library",
 | 
			
		||||
        "//vendor/k8s.io/apimachinery/pkg/util/wait:go_default_library",
 | 
			
		||||
        "//vendor/k8s.io/client-go/tools/remotecommand:go_default_library",
 | 
			
		||||
        "//vendor/k8s.io/utils/exec:go_default_library",
 | 
			
		||||
    ],
 | 
			
		||||
)
 | 
			
		||||
 | 
			
		||||
 
 | 
			
		||||
@@ -28,8 +28,8 @@ import (
 | 
			
		||||
 | 
			
		||||
	"k8s.io/client-go/tools/remotecommand"
 | 
			
		||||
	kubecontainer "k8s.io/kubernetes/pkg/kubelet/container"
 | 
			
		||||
	utilexec "k8s.io/kubernetes/pkg/util/exec"
 | 
			
		||||
	"k8s.io/kubernetes/pkg/util/term"
 | 
			
		||||
	utilexec "k8s.io/utils/exec"
 | 
			
		||||
 | 
			
		||||
	"k8s.io/kubernetes/pkg/kubelet/dockershim/libdocker"
 | 
			
		||||
)
 | 
			
		||||
 
 | 
			
		||||
@@ -19,11 +19,11 @@ go_library(
 | 
			
		||||
        "//pkg/kubelet/apis/cri/v1alpha1/runtime:go_default_library",
 | 
			
		||||
        "//pkg/kubelet/dockershim:go_default_library",
 | 
			
		||||
        "//pkg/kubelet/util:go_default_library",
 | 
			
		||||
        "//pkg/util/exec:go_default_library",
 | 
			
		||||
        "//pkg/util/interrupt:go_default_library",
 | 
			
		||||
        "//vendor/github.com/golang/glog:go_default_library",
 | 
			
		||||
        "//vendor/golang.org/x/net/context:go_default_library",
 | 
			
		||||
        "//vendor/google.golang.org/grpc:go_default_library",
 | 
			
		||||
        "//vendor/k8s.io/utils/exec:go_default_library",
 | 
			
		||||
    ],
 | 
			
		||||
)
 | 
			
		||||
 | 
			
		||||
 
 | 
			
		||||
@@ -25,7 +25,7 @@ import (
 | 
			
		||||
	internalapi "k8s.io/kubernetes/pkg/kubelet/apis/cri"
 | 
			
		||||
	runtimeapi "k8s.io/kubernetes/pkg/kubelet/apis/cri/v1alpha1/runtime"
 | 
			
		||||
	"k8s.io/kubernetes/pkg/kubelet/dockershim"
 | 
			
		||||
	utilexec "k8s.io/kubernetes/pkg/util/exec"
 | 
			
		||||
	utilexec "k8s.io/utils/exec"
 | 
			
		||||
)
 | 
			
		||||
 | 
			
		||||
// DockerService is the interface implement CRI remote service server.
 | 
			
		||||
 
 | 
			
		||||
@@ -99,7 +99,6 @@ import (
 | 
			
		||||
	"k8s.io/kubernetes/pkg/kubelet/volumemanager"
 | 
			
		||||
	"k8s.io/kubernetes/pkg/security/apparmor"
 | 
			
		||||
	utildbus "k8s.io/kubernetes/pkg/util/dbus"
 | 
			
		||||
	utilexec "k8s.io/kubernetes/pkg/util/exec"
 | 
			
		||||
	kubeio "k8s.io/kubernetes/pkg/util/io"
 | 
			
		||||
	utilipt "k8s.io/kubernetes/pkg/util/iptables"
 | 
			
		||||
	"k8s.io/kubernetes/pkg/util/mount"
 | 
			
		||||
@@ -107,6 +106,7 @@ import (
 | 
			
		||||
	"k8s.io/kubernetes/pkg/util/oom"
 | 
			
		||||
	"k8s.io/kubernetes/pkg/volume"
 | 
			
		||||
	"k8s.io/kubernetes/plugin/pkg/scheduler/algorithm/predicates"
 | 
			
		||||
	utilexec "k8s.io/utils/exec"
 | 
			
		||||
)
 | 
			
		||||
 | 
			
		||||
const (
 | 
			
		||||
 
 | 
			
		||||
@@ -18,7 +18,6 @@ go_library(
 | 
			
		||||
        "//pkg/apis/componentconfig:go_default_library",
 | 
			
		||||
        "//pkg/kubelet/container:go_default_library",
 | 
			
		||||
        "//pkg/kubelet/network/hostport:go_default_library",
 | 
			
		||||
        "//pkg/util/exec:go_default_library",
 | 
			
		||||
        "//pkg/util/sysctl:go_default_library",
 | 
			
		||||
        "//vendor/github.com/golang/glog:go_default_library",
 | 
			
		||||
        "//vendor/k8s.io/api/core/v1:go_default_library",
 | 
			
		||||
@@ -27,6 +26,7 @@ go_library(
 | 
			
		||||
        "//vendor/k8s.io/apimachinery/pkg/util/sets:go_default_library",
 | 
			
		||||
        "//vendor/k8s.io/apimachinery/pkg/util/validation:go_default_library",
 | 
			
		||||
        "//vendor/k8s.io/client-go/kubernetes:go_default_library",
 | 
			
		||||
        "//vendor/k8s.io/utils/exec:go_default_library",
 | 
			
		||||
    ],
 | 
			
		||||
)
 | 
			
		||||
 | 
			
		||||
 
 | 
			
		||||
@@ -16,10 +16,10 @@ go_library(
 | 
			
		||||
        "//pkg/apis/componentconfig:go_default_library",
 | 
			
		||||
        "//pkg/kubelet/container:go_default_library",
 | 
			
		||||
        "//pkg/kubelet/network:go_default_library",
 | 
			
		||||
        "//pkg/util/exec:go_default_library",
 | 
			
		||||
        "//vendor/github.com/containernetworking/cni/libcni:go_default_library",
 | 
			
		||||
        "//vendor/github.com/containernetworking/cni/pkg/types:go_default_library",
 | 
			
		||||
        "//vendor/github.com/golang/glog:go_default_library",
 | 
			
		||||
        "//vendor/k8s.io/utils/exec:go_default_library",
 | 
			
		||||
    ],
 | 
			
		||||
)
 | 
			
		||||
 | 
			
		||||
@@ -36,12 +36,13 @@ go_test(
 | 
			
		||||
        "//pkg/kubelet/network/cni/testing:go_default_library",
 | 
			
		||||
        "//pkg/kubelet/network/hostport:go_default_library",
 | 
			
		||||
        "//pkg/kubelet/network/testing:go_default_library",
 | 
			
		||||
        "//pkg/util/exec:go_default_library",
 | 
			
		||||
        "//vendor/github.com/containernetworking/cni/pkg/types/020:go_default_library",
 | 
			
		||||
        "//vendor/github.com/stretchr/testify/mock:go_default_library",
 | 
			
		||||
        "//vendor/k8s.io/api/core/v1:go_default_library",
 | 
			
		||||
        "//vendor/k8s.io/client-go/kubernetes:go_default_library",
 | 
			
		||||
        "//vendor/k8s.io/client-go/util/testing:go_default_library",
 | 
			
		||||
        "//vendor/k8s.io/utils/exec:go_default_library",
 | 
			
		||||
        "//vendor/k8s.io/utils/exec/testing:go_default_library",
 | 
			
		||||
    ],
 | 
			
		||||
)
 | 
			
		||||
 | 
			
		||||
 
 | 
			
		||||
@@ -29,7 +29,7 @@ import (
 | 
			
		||||
	"k8s.io/kubernetes/pkg/apis/componentconfig"
 | 
			
		||||
	kubecontainer "k8s.io/kubernetes/pkg/kubelet/container"
 | 
			
		||||
	"k8s.io/kubernetes/pkg/kubelet/network"
 | 
			
		||||
	utilexec "k8s.io/kubernetes/pkg/util/exec"
 | 
			
		||||
	utilexec "k8s.io/utils/exec"
 | 
			
		||||
)
 | 
			
		||||
 | 
			
		||||
const (
 | 
			
		||||
 
 | 
			
		||||
@@ -43,7 +43,8 @@ import (
 | 
			
		||||
	"k8s.io/kubernetes/pkg/kubelet/network/cni/testing"
 | 
			
		||||
	"k8s.io/kubernetes/pkg/kubelet/network/hostport"
 | 
			
		||||
	networktest "k8s.io/kubernetes/pkg/kubelet/network/testing"
 | 
			
		||||
	utilexec "k8s.io/kubernetes/pkg/util/exec"
 | 
			
		||||
	"k8s.io/utils/exec"
 | 
			
		||||
	fakeexec "k8s.io/utils/exec/testing"
 | 
			
		||||
)
 | 
			
		||||
 | 
			
		||||
func installPluginUnderTest(t *testing.T, testVendorCNIDirPrefix, testNetworkConfigPath, vendorName string, plugName string) {
 | 
			
		||||
@@ -159,10 +160,10 @@ func TestCNIPlugin(t *testing.T) {
 | 
			
		||||
 | 
			
		||||
	podIP := "10.0.0.2"
 | 
			
		||||
	podIPOutput := fmt.Sprintf("4: eth0    inet %s/24 scope global dynamic eth0\\       valid_lft forever preferred_lft forever", podIP)
 | 
			
		||||
	fakeCmds := []utilexec.FakeCommandAction{
 | 
			
		||||
		func(cmd string, args ...string) utilexec.Cmd {
 | 
			
		||||
			return utilexec.InitFakeCmd(&utilexec.FakeCmd{
 | 
			
		||||
				CombinedOutputScript: []utilexec.FakeCombinedOutputAction{
 | 
			
		||||
	fakeCmds := []fakeexec.FakeCommandAction{
 | 
			
		||||
		func(cmd string, args ...string) exec.Cmd {
 | 
			
		||||
			return fakeexec.InitFakeCmd(&fakeexec.FakeCmd{
 | 
			
		||||
				CombinedOutputScript: []fakeexec.FakeCombinedOutputAction{
 | 
			
		||||
					func() ([]byte, error) {
 | 
			
		||||
						return []byte(podIPOutput), nil
 | 
			
		||||
					},
 | 
			
		||||
@@ -171,7 +172,7 @@ func TestCNIPlugin(t *testing.T) {
 | 
			
		||||
		},
 | 
			
		||||
	}
 | 
			
		||||
 | 
			
		||||
	fexec := &utilexec.FakeExec{
 | 
			
		||||
	fexec := &fakeexec.FakeExec{
 | 
			
		||||
		CommandScript: fakeCmds,
 | 
			
		||||
		LookPathFunc: func(file string) (string, error) {
 | 
			
		||||
			return fmt.Sprintf("/fake-bin/%s", file), nil
 | 
			
		||||
 
 | 
			
		||||
@@ -13,8 +13,8 @@ go_library(
 | 
			
		||||
    srcs = ["hairpin.go"],
 | 
			
		||||
    tags = ["automanaged"],
 | 
			
		||||
    deps = [
 | 
			
		||||
        "//pkg/util/exec:go_default_library",
 | 
			
		||||
        "//vendor/github.com/golang/glog:go_default_library",
 | 
			
		||||
        "//vendor/k8s.io/utils/exec:go_default_library",
 | 
			
		||||
    ],
 | 
			
		||||
)
 | 
			
		||||
 | 
			
		||||
@@ -23,7 +23,10 @@ go_test(
 | 
			
		||||
    srcs = ["hairpin_test.go"],
 | 
			
		||||
    library = ":go_default_library",
 | 
			
		||||
    tags = ["automanaged"],
 | 
			
		||||
    deps = ["//pkg/util/exec:go_default_library"],
 | 
			
		||||
    deps = [
 | 
			
		||||
        "//vendor/k8s.io/utils/exec:go_default_library",
 | 
			
		||||
        "//vendor/k8s.io/utils/exec/testing:go_default_library",
 | 
			
		||||
    ],
 | 
			
		||||
)
 | 
			
		||||
 | 
			
		||||
filegroup(
 | 
			
		||||
 
 | 
			
		||||
@@ -26,7 +26,7 @@ import (
 | 
			
		||||
	"strconv"
 | 
			
		||||
 | 
			
		||||
	"github.com/golang/glog"
 | 
			
		||||
	"k8s.io/kubernetes/pkg/util/exec"
 | 
			
		||||
	"k8s.io/utils/exec"
 | 
			
		||||
)
 | 
			
		||||
 | 
			
		||||
const (
 | 
			
		||||
 
 | 
			
		||||
@@ -24,7 +24,8 @@ import (
 | 
			
		||||
	"strings"
 | 
			
		||||
	"testing"
 | 
			
		||||
 | 
			
		||||
	"k8s.io/kubernetes/pkg/util/exec"
 | 
			
		||||
	"k8s.io/utils/exec"
 | 
			
		||||
	fakeexec "k8s.io/utils/exec/testing"
 | 
			
		||||
)
 | 
			
		||||
 | 
			
		||||
func TestFindPairInterfaceOfContainerInterface(t *testing.T) {
 | 
			
		||||
@@ -54,15 +55,15 @@ func TestFindPairInterfaceOfContainerInterface(t *testing.T) {
 | 
			
		||||
		},
 | 
			
		||||
	}
 | 
			
		||||
	for _, test := range tests {
 | 
			
		||||
		fcmd := exec.FakeCmd{
 | 
			
		||||
			CombinedOutputScript: []exec.FakeCombinedOutputAction{
 | 
			
		||||
		fcmd := fakeexec.FakeCmd{
 | 
			
		||||
			CombinedOutputScript: []fakeexec.FakeCombinedOutputAction{
 | 
			
		||||
				func() ([]byte, error) { return []byte(test.output), test.err },
 | 
			
		||||
			},
 | 
			
		||||
		}
 | 
			
		||||
		fexec := exec.FakeExec{
 | 
			
		||||
			CommandScript: []exec.FakeCommandAction{
 | 
			
		||||
		fexec := fakeexec.FakeExec{
 | 
			
		||||
			CommandScript: []fakeexec.FakeCommandAction{
 | 
			
		||||
				func(cmd string, args ...string) exec.Cmd {
 | 
			
		||||
					return exec.InitFakeCmd(&fcmd, cmd, args...)
 | 
			
		||||
					return fakeexec.InitFakeCmd(&fcmd, cmd, args...)
 | 
			
		||||
				},
 | 
			
		||||
			},
 | 
			
		||||
			LookPathFunc: func(file string) (string, error) {
 | 
			
		||||
 
 | 
			
		||||
@@ -23,7 +23,6 @@ go_library(
 | 
			
		||||
        "//pkg/util/bandwidth:go_default_library",
 | 
			
		||||
        "//pkg/util/dbus:go_default_library",
 | 
			
		||||
        "//pkg/util/ebtables:go_default_library",
 | 
			
		||||
        "//pkg/util/exec:go_default_library",
 | 
			
		||||
        "//pkg/util/iptables:go_default_library",
 | 
			
		||||
        "//pkg/util/sysctl:go_default_library",
 | 
			
		||||
        "//vendor/github.com/containernetworking/cni/libcni:go_default_library",
 | 
			
		||||
@@ -35,6 +34,7 @@ go_library(
 | 
			
		||||
        "//vendor/k8s.io/apimachinery/pkg/util/errors:go_default_library",
 | 
			
		||||
        "//vendor/k8s.io/apimachinery/pkg/util/net:go_default_library",
 | 
			
		||||
        "//vendor/k8s.io/apimachinery/pkg/util/sets:go_default_library",
 | 
			
		||||
        "//vendor/k8s.io/utils/exec:go_default_library",
 | 
			
		||||
    ],
 | 
			
		||||
)
 | 
			
		||||
 | 
			
		||||
@@ -51,11 +51,12 @@ go_test(
 | 
			
		||||
        "//pkg/kubelet/network/hostport/testing:go_default_library",
 | 
			
		||||
        "//pkg/kubelet/network/testing:go_default_library",
 | 
			
		||||
        "//pkg/util/bandwidth:go_default_library",
 | 
			
		||||
        "//pkg/util/exec:go_default_library",
 | 
			
		||||
        "//pkg/util/iptables/testing:go_default_library",
 | 
			
		||||
        "//pkg/util/sysctl/testing:go_default_library",
 | 
			
		||||
        "//vendor/github.com/stretchr/testify/assert:go_default_library",
 | 
			
		||||
        "//vendor/github.com/stretchr/testify/mock:go_default_library",
 | 
			
		||||
        "//vendor/k8s.io/utils/exec:go_default_library",
 | 
			
		||||
        "//vendor/k8s.io/utils/exec/testing:go_default_library",
 | 
			
		||||
    ],
 | 
			
		||||
)
 | 
			
		||||
 | 
			
		||||
 
 | 
			
		||||
@@ -45,9 +45,9 @@ import (
 | 
			
		||||
	"k8s.io/kubernetes/pkg/util/bandwidth"
 | 
			
		||||
	utildbus "k8s.io/kubernetes/pkg/util/dbus"
 | 
			
		||||
	utilebtables "k8s.io/kubernetes/pkg/util/ebtables"
 | 
			
		||||
	utilexec "k8s.io/kubernetes/pkg/util/exec"
 | 
			
		||||
	utiliptables "k8s.io/kubernetes/pkg/util/iptables"
 | 
			
		||||
	utilsysctl "k8s.io/kubernetes/pkg/util/sysctl"
 | 
			
		||||
	utilexec "k8s.io/utils/exec"
 | 
			
		||||
)
 | 
			
		||||
 | 
			
		||||
const (
 | 
			
		||||
 
 | 
			
		||||
@@ -32,9 +32,10 @@ import (
 | 
			
		||||
	hostporttest "k8s.io/kubernetes/pkg/kubelet/network/hostport/testing"
 | 
			
		||||
	nettest "k8s.io/kubernetes/pkg/kubelet/network/testing"
 | 
			
		||||
	"k8s.io/kubernetes/pkg/util/bandwidth"
 | 
			
		||||
	"k8s.io/kubernetes/pkg/util/exec"
 | 
			
		||||
	ipttest "k8s.io/kubernetes/pkg/util/iptables/testing"
 | 
			
		||||
	sysctltest "k8s.io/kubernetes/pkg/util/sysctl/testing"
 | 
			
		||||
	"k8s.io/utils/exec"
 | 
			
		||||
	fakeexec "k8s.io/utils/exec/testing"
 | 
			
		||||
)
 | 
			
		||||
 | 
			
		||||
// test it fulfills the NetworkPlugin interface
 | 
			
		||||
@@ -79,11 +80,11 @@ func TestGetPodNetworkStatus(t *testing.T) {
 | 
			
		||||
		//TODO: add test cases for retrieving ip inside container network namespace
 | 
			
		||||
	}
 | 
			
		||||
 | 
			
		||||
	fakeCmds := make([]exec.FakeCommandAction, 0)
 | 
			
		||||
	fakeCmds := make([]fakeexec.FakeCommandAction, 0)
 | 
			
		||||
	for _, t := range testCases {
 | 
			
		||||
		// the fake commands return the IP from the given index, or an error
 | 
			
		||||
		fCmd := exec.FakeCmd{
 | 
			
		||||
			CombinedOutputScript: []exec.FakeCombinedOutputAction{
 | 
			
		||||
		fCmd := fakeexec.FakeCmd{
 | 
			
		||||
			CombinedOutputScript: []fakeexec.FakeCombinedOutputAction{
 | 
			
		||||
				func() ([]byte, error) {
 | 
			
		||||
					ip, ok := podIPMap[kubecontainer.ContainerID{ID: t.id}]
 | 
			
		||||
					if !ok {
 | 
			
		||||
@@ -94,10 +95,10 @@ func TestGetPodNetworkStatus(t *testing.T) {
 | 
			
		||||
			},
 | 
			
		||||
		}
 | 
			
		||||
		fakeCmds = append(fakeCmds, func(cmd string, args ...string) exec.Cmd {
 | 
			
		||||
			return exec.InitFakeCmd(&fCmd, cmd, args...)
 | 
			
		||||
			return fakeexec.InitFakeCmd(&fCmd, cmd, args...)
 | 
			
		||||
		})
 | 
			
		||||
	}
 | 
			
		||||
	fexec := exec.FakeExec{
 | 
			
		||||
	fexec := fakeexec.FakeExec{
 | 
			
		||||
		CommandScript: fakeCmds,
 | 
			
		||||
		LookPathFunc: func(file string) (string, error) {
 | 
			
		||||
			return fmt.Sprintf("/fake-bin/%s", file), nil
 | 
			
		||||
@@ -128,8 +129,8 @@ func TestGetPodNetworkStatus(t *testing.T) {
 | 
			
		||||
// TestTeardownCallsShaper tests that a `TearDown` call does call
 | 
			
		||||
// `shaper.Reset`
 | 
			
		||||
func TestTeardownCallsShaper(t *testing.T) {
 | 
			
		||||
	fexec := &exec.FakeExec{
 | 
			
		||||
		CommandScript: []exec.FakeCommandAction{},
 | 
			
		||||
	fexec := &fakeexec.FakeExec{
 | 
			
		||||
		CommandScript: []fakeexec.FakeCommandAction{},
 | 
			
		||||
		LookPathFunc: func(file string) (string, error) {
 | 
			
		||||
			return fmt.Sprintf("/fake-bin/%s", file), nil
 | 
			
		||||
		},
 | 
			
		||||
@@ -162,22 +163,22 @@ func TestTeardownCallsShaper(t *testing.T) {
 | 
			
		||||
 | 
			
		||||
// TestInit tests that a `Init` call with an MTU sets the MTU
 | 
			
		||||
func TestInit_MTU(t *testing.T) {
 | 
			
		||||
	var fakeCmds []exec.FakeCommandAction
 | 
			
		||||
	var fakeCmds []fakeexec.FakeCommandAction
 | 
			
		||||
	{
 | 
			
		||||
		// modprobe br-netfilter
 | 
			
		||||
		fCmd := exec.FakeCmd{
 | 
			
		||||
			CombinedOutputScript: []exec.FakeCombinedOutputAction{
 | 
			
		||||
		fCmd := fakeexec.FakeCmd{
 | 
			
		||||
			CombinedOutputScript: []fakeexec.FakeCombinedOutputAction{
 | 
			
		||||
				func() ([]byte, error) {
 | 
			
		||||
					return make([]byte, 0), nil
 | 
			
		||||
				},
 | 
			
		||||
			},
 | 
			
		||||
		}
 | 
			
		||||
		fakeCmds = append(fakeCmds, func(cmd string, args ...string) exec.Cmd {
 | 
			
		||||
			return exec.InitFakeCmd(&fCmd, cmd, args...)
 | 
			
		||||
			return fakeexec.InitFakeCmd(&fCmd, cmd, args...)
 | 
			
		||||
		})
 | 
			
		||||
	}
 | 
			
		||||
 | 
			
		||||
	fexec := &exec.FakeExec{
 | 
			
		||||
	fexec := &fakeexec.FakeExec{
 | 
			
		||||
		CommandScript: fakeCmds,
 | 
			
		||||
		LookPathFunc: func(file string) (string, error) {
 | 
			
		||||
			return fmt.Sprintf("/fake-bin/%s", file), nil
 | 
			
		||||
@@ -254,8 +255,8 @@ func TestTearDownWithoutRuntime(t *testing.T) {
 | 
			
		||||
		fhost.Runtime = nil
 | 
			
		||||
		mockcni := &mock_cni.MockCNI{}
 | 
			
		||||
 | 
			
		||||
		fexec := &exec.FakeExec{
 | 
			
		||||
			CommandScript: []exec.FakeCommandAction{},
 | 
			
		||||
		fexec := &fakeexec.FakeExec{
 | 
			
		||||
			CommandScript: []fakeexec.FakeCommandAction{},
 | 
			
		||||
			LookPathFunc: func(file string) (string, error) {
 | 
			
		||||
				return fmt.Sprintf("/fake-bin/%s", file), nil
 | 
			
		||||
			},
 | 
			
		||||
 
 | 
			
		||||
@@ -32,8 +32,8 @@ import (
 | 
			
		||||
	"k8s.io/kubernetes/pkg/apis/componentconfig"
 | 
			
		||||
	kubecontainer "k8s.io/kubernetes/pkg/kubelet/container"
 | 
			
		||||
	"k8s.io/kubernetes/pkg/kubelet/network/hostport"
 | 
			
		||||
	utilexec "k8s.io/kubernetes/pkg/util/exec"
 | 
			
		||||
	utilsysctl "k8s.io/kubernetes/pkg/util/sysctl"
 | 
			
		||||
	utilexec "k8s.io/utils/exec"
 | 
			
		||||
)
 | 
			
		||||
 | 
			
		||||
const DefaultPluginName = "kubernetes.io/no-op"
 | 
			
		||||
 
 | 
			
		||||
@@ -27,7 +27,6 @@ go_library(
 | 
			
		||||
        "//pkg/probe/exec:go_default_library",
 | 
			
		||||
        "//pkg/probe/http:go_default_library",
 | 
			
		||||
        "//pkg/probe/tcp:go_default_library",
 | 
			
		||||
        "//pkg/util/exec:go_default_library",
 | 
			
		||||
        "//vendor/github.com/golang/glog:go_default_library",
 | 
			
		||||
        "//vendor/k8s.io/api/core/v1:go_default_library",
 | 
			
		||||
        "//vendor/k8s.io/apimachinery/pkg/types:go_default_library",
 | 
			
		||||
@@ -36,6 +35,7 @@ go_library(
 | 
			
		||||
        "//vendor/k8s.io/apimachinery/pkg/util/sets:go_default_library",
 | 
			
		||||
        "//vendor/k8s.io/apimachinery/pkg/util/wait:go_default_library",
 | 
			
		||||
        "//vendor/k8s.io/client-go/tools/record:go_default_library",
 | 
			
		||||
        "//vendor/k8s.io/utils/exec:go_default_library",
 | 
			
		||||
    ],
 | 
			
		||||
)
 | 
			
		||||
 | 
			
		||||
@@ -58,7 +58,6 @@ go_test(
 | 
			
		||||
        "//pkg/kubelet/status/testing:go_default_library",
 | 
			
		||||
        "//pkg/probe:go_default_library",
 | 
			
		||||
        "//pkg/probe/exec:go_default_library",
 | 
			
		||||
        "//pkg/util/exec:go_default_library",
 | 
			
		||||
        "//vendor/github.com/golang/glog:go_default_library",
 | 
			
		||||
        "//vendor/k8s.io/api/core/v1:go_default_library",
 | 
			
		||||
        "//vendor/k8s.io/apimachinery/pkg/apis/meta/v1:go_default_library",
 | 
			
		||||
@@ -68,6 +67,7 @@ go_test(
 | 
			
		||||
        "//vendor/k8s.io/apimachinery/pkg/util/wait:go_default_library",
 | 
			
		||||
        "//vendor/k8s.io/client-go/kubernetes/fake:go_default_library",
 | 
			
		||||
        "//vendor/k8s.io/client-go/tools/record:go_default_library",
 | 
			
		||||
        "//vendor/k8s.io/utils/exec:go_default_library",
 | 
			
		||||
    ],
 | 
			
		||||
)
 | 
			
		||||
 | 
			
		||||
 
 | 
			
		||||
@@ -30,7 +30,7 @@ import (
 | 
			
		||||
	"k8s.io/kubernetes/pkg/kubelet/status"
 | 
			
		||||
	statustest "k8s.io/kubernetes/pkg/kubelet/status/testing"
 | 
			
		||||
	"k8s.io/kubernetes/pkg/probe"
 | 
			
		||||
	"k8s.io/kubernetes/pkg/util/exec"
 | 
			
		||||
	"k8s.io/utils/exec"
 | 
			
		||||
)
 | 
			
		||||
 | 
			
		||||
const (
 | 
			
		||||
 
 | 
			
		||||
@@ -37,7 +37,7 @@ import (
 | 
			
		||||
	execprobe "k8s.io/kubernetes/pkg/probe/exec"
 | 
			
		||||
	httprobe "k8s.io/kubernetes/pkg/probe/http"
 | 
			
		||||
	tcprobe "k8s.io/kubernetes/pkg/probe/tcp"
 | 
			
		||||
	"k8s.io/kubernetes/pkg/util/exec"
 | 
			
		||||
	"k8s.io/utils/exec"
 | 
			
		||||
 | 
			
		||||
	"github.com/golang/glog"
 | 
			
		||||
)
 | 
			
		||||
 
 | 
			
		||||
@@ -33,7 +33,7 @@ import (
 | 
			
		||||
	"k8s.io/kubernetes/pkg/kubelet/status"
 | 
			
		||||
	statustest "k8s.io/kubernetes/pkg/kubelet/status/testing"
 | 
			
		||||
	"k8s.io/kubernetes/pkg/probe"
 | 
			
		||||
	"k8s.io/kubernetes/pkg/util/exec"
 | 
			
		||||
	"k8s.io/utils/exec"
 | 
			
		||||
)
 | 
			
		||||
 | 
			
		||||
func init() {
 | 
			
		||||
 
 | 
			
		||||
@@ -20,10 +20,10 @@ go_library(
 | 
			
		||||
        "//pkg/kubelet/apis/cri:go_default_library",
 | 
			
		||||
        "//pkg/kubelet/apis/cri/v1alpha1/runtime:go_default_library",
 | 
			
		||||
        "//pkg/kubelet/util:go_default_library",
 | 
			
		||||
        "//pkg/util/exec:go_default_library",
 | 
			
		||||
        "//vendor/github.com/golang/glog:go_default_library",
 | 
			
		||||
        "//vendor/golang.org/x/net/context:go_default_library",
 | 
			
		||||
        "//vendor/google.golang.org/grpc:go_default_library",
 | 
			
		||||
        "//vendor/k8s.io/utils/exec:go_default_library",
 | 
			
		||||
    ],
 | 
			
		||||
)
 | 
			
		||||
 | 
			
		||||
 
 | 
			
		||||
@@ -28,7 +28,7 @@ import (
 | 
			
		||||
	internalapi "k8s.io/kubernetes/pkg/kubelet/apis/cri"
 | 
			
		||||
	runtimeapi "k8s.io/kubernetes/pkg/kubelet/apis/cri/v1alpha1/runtime"
 | 
			
		||||
	"k8s.io/kubernetes/pkg/kubelet/util"
 | 
			
		||||
	utilexec "k8s.io/kubernetes/pkg/util/exec"
 | 
			
		||||
	utilexec "k8s.io/utils/exec"
 | 
			
		||||
)
 | 
			
		||||
 | 
			
		||||
// RemoteRuntimeService is a gRPC implementation of internalapi.RuntimeService.
 | 
			
		||||
 
 | 
			
		||||
@@ -35,7 +35,6 @@ go_library(
 | 
			
		||||
        "//pkg/kubelet/types:go_default_library",
 | 
			
		||||
        "//pkg/kubelet/util/format:go_default_library",
 | 
			
		||||
        "//pkg/securitycontext:go_default_library",
 | 
			
		||||
        "//pkg/util/exec:go_default_library",
 | 
			
		||||
        "//pkg/util/parsers:go_default_library",
 | 
			
		||||
        "//pkg/util/selinux:go_default_library",
 | 
			
		||||
        "//pkg/util/strings:go_default_library",
 | 
			
		||||
@@ -59,6 +58,7 @@ go_library(
 | 
			
		||||
        "//vendor/k8s.io/client-go/tools/record:go_default_library",
 | 
			
		||||
        "//vendor/k8s.io/client-go/tools/remotecommand:go_default_library",
 | 
			
		||||
        "//vendor/k8s.io/client-go/util/flowcontrol:go_default_library",
 | 
			
		||||
        "//vendor/k8s.io/utils/exec:go_default_library",
 | 
			
		||||
    ],
 | 
			
		||||
)
 | 
			
		||||
 | 
			
		||||
@@ -78,7 +78,6 @@ go_test(
 | 
			
		||||
        "//pkg/kubelet/network/kubenet:go_default_library",
 | 
			
		||||
        "//pkg/kubelet/network/testing:go_default_library",
 | 
			
		||||
        "//pkg/kubelet/types:go_default_library",
 | 
			
		||||
        "//pkg/util/exec:go_default_library",
 | 
			
		||||
        "//vendor/github.com/appc/spec/schema:go_default_library",
 | 
			
		||||
        "//vendor/github.com/appc/spec/schema/types:go_default_library",
 | 
			
		||||
        "//vendor/github.com/coreos/go-systemd/dbus:go_default_library",
 | 
			
		||||
@@ -94,6 +93,8 @@ go_test(
 | 
			
		||||
        "//vendor/k8s.io/apimachinery/pkg/types:go_default_library",
 | 
			
		||||
        "//vendor/k8s.io/apimachinery/pkg/util/errors:go_default_library",
 | 
			
		||||
        "//vendor/k8s.io/client-go/util/testing:go_default_library",
 | 
			
		||||
        "//vendor/k8s.io/utils/exec:go_default_library",
 | 
			
		||||
        "//vendor/k8s.io/utils/exec/testing:go_default_library",
 | 
			
		||||
    ],
 | 
			
		||||
)
 | 
			
		||||
 | 
			
		||||
 
 | 
			
		||||
@@ -62,10 +62,10 @@ import (
 | 
			
		||||
	"k8s.io/kubernetes/pkg/kubelet/types"
 | 
			
		||||
	"k8s.io/kubernetes/pkg/kubelet/util/format"
 | 
			
		||||
	"k8s.io/kubernetes/pkg/securitycontext"
 | 
			
		||||
	utilexec "k8s.io/kubernetes/pkg/util/exec"
 | 
			
		||||
	"k8s.io/kubernetes/pkg/util/selinux"
 | 
			
		||||
	utilstrings "k8s.io/kubernetes/pkg/util/strings"
 | 
			
		||||
	"k8s.io/kubernetes/pkg/util/term"
 | 
			
		||||
	utilexec "k8s.io/utils/exec"
 | 
			
		||||
)
 | 
			
		||||
 | 
			
		||||
const (
 | 
			
		||||
 
 | 
			
		||||
@@ -46,7 +46,8 @@ import (
 | 
			
		||||
	"k8s.io/kubernetes/pkg/kubelet/network/kubenet"
 | 
			
		||||
	nettest "k8s.io/kubernetes/pkg/kubelet/network/testing"
 | 
			
		||||
	"k8s.io/kubernetes/pkg/kubelet/types"
 | 
			
		||||
	utilexec "k8s.io/kubernetes/pkg/util/exec"
 | 
			
		||||
	"k8s.io/utils/exec"
 | 
			
		||||
	fakeexec "k8s.io/utils/exec/testing"
 | 
			
		||||
	"strings"
 | 
			
		||||
)
 | 
			
		||||
 | 
			
		||||
@@ -1415,8 +1416,8 @@ func TestGenerateRunCommand(t *testing.T) {
 | 
			
		||||
			HostName:    tt.hostName,
 | 
			
		||||
			Err:         tt.err,
 | 
			
		||||
		}
 | 
			
		||||
		rkt.execer = &utilexec.FakeExec{CommandScript: []utilexec.FakeCommandAction{func(cmd string, args ...string) utilexec.Cmd {
 | 
			
		||||
			return utilexec.InitFakeCmd(&utilexec.FakeCmd{}, cmd, args...)
 | 
			
		||||
		rkt.execer = &fakeexec.FakeExec{CommandScript: []fakeexec.FakeCommandAction{func(cmd string, args ...string) exec.Cmd {
 | 
			
		||||
			return fakeexec.InitFakeCmd(&fakeexec.FakeCmd{}, cmd, args...)
 | 
			
		||||
		}}}
 | 
			
		||||
 | 
			
		||||
		// a command should be created of this form, but the returned command shouldn't be called (asserted by having no expectations on it)
 | 
			
		||||
 
 | 
			
		||||
@@ -19,7 +19,6 @@ go_library(
 | 
			
		||||
    tags = ["automanaged"],
 | 
			
		||||
    deps = [
 | 
			
		||||
        "//pkg/api:go_default_library",
 | 
			
		||||
        "//pkg/util/exec:go_default_library",
 | 
			
		||||
        "//vendor/github.com/golang/glog:go_default_library",
 | 
			
		||||
        "//vendor/k8s.io/apimachinery/pkg/api/errors:go_default_library",
 | 
			
		||||
        "//vendor/k8s.io/apimachinery/pkg/apis/meta/v1:go_default_library",
 | 
			
		||||
@@ -31,6 +30,7 @@ go_library(
 | 
			
		||||
        "//vendor/k8s.io/apiserver/pkg/server/httplog:go_default_library",
 | 
			
		||||
        "//vendor/k8s.io/apiserver/pkg/util/wsstream:go_default_library",
 | 
			
		||||
        "//vendor/k8s.io/client-go/tools/remotecommand:go_default_library",
 | 
			
		||||
        "//vendor/k8s.io/utils/exec:go_default_library",
 | 
			
		||||
    ],
 | 
			
		||||
)
 | 
			
		||||
 | 
			
		||||
 
 | 
			
		||||
@@ -28,7 +28,7 @@ import (
 | 
			
		||||
	remotecommandconsts "k8s.io/apimachinery/pkg/util/remotecommand"
 | 
			
		||||
	"k8s.io/apimachinery/pkg/util/runtime"
 | 
			
		||||
	"k8s.io/client-go/tools/remotecommand"
 | 
			
		||||
	utilexec "k8s.io/kubernetes/pkg/util/exec"
 | 
			
		||||
	utilexec "k8s.io/utils/exec"
 | 
			
		||||
)
 | 
			
		||||
 | 
			
		||||
// Executor knows how to execute a command in a container in a pod.
 | 
			
		||||
 
 | 
			
		||||
@@ -31,7 +31,6 @@ go_library(
 | 
			
		||||
        "//pkg/proxy:go_default_library",
 | 
			
		||||
        "//pkg/proxy/config:go_default_library",
 | 
			
		||||
        "//pkg/proxy/iptables:go_default_library",
 | 
			
		||||
        "//pkg/util/exec:go_default_library",
 | 
			
		||||
        "//pkg/util/io:go_default_library",
 | 
			
		||||
        "//pkg/util/iptables:go_default_library",
 | 
			
		||||
        "//pkg/util/mount:go_default_library",
 | 
			
		||||
@@ -49,6 +48,7 @@ go_library(
 | 
			
		||||
        "//vendor/k8s.io/client-go/kubernetes:go_default_library",
 | 
			
		||||
        "//vendor/k8s.io/client-go/kubernetes/typed/core/v1:go_default_library",
 | 
			
		||||
        "//vendor/k8s.io/client-go/tools/record:go_default_library",
 | 
			
		||||
        "//vendor/k8s.io/utils/exec:go_default_library",
 | 
			
		||||
    ],
 | 
			
		||||
)
 | 
			
		||||
 | 
			
		||||
 
 | 
			
		||||
@@ -32,11 +32,11 @@ import (
 | 
			
		||||
	"k8s.io/kubernetes/pkg/proxy"
 | 
			
		||||
	proxyconfig "k8s.io/kubernetes/pkg/proxy/config"
 | 
			
		||||
	"k8s.io/kubernetes/pkg/proxy/iptables"
 | 
			
		||||
	utilexec "k8s.io/kubernetes/pkg/util/exec"
 | 
			
		||||
	utiliptables "k8s.io/kubernetes/pkg/util/iptables"
 | 
			
		||||
	utilnode "k8s.io/kubernetes/pkg/util/node"
 | 
			
		||||
	utilpointer "k8s.io/kubernetes/pkg/util/pointer"
 | 
			
		||||
	utilsysctl "k8s.io/kubernetes/pkg/util/sysctl"
 | 
			
		||||
	utilexec "k8s.io/utils/exec"
 | 
			
		||||
 | 
			
		||||
	"github.com/golang/glog"
 | 
			
		||||
)
 | 
			
		||||
 
 | 
			
		||||
@@ -14,8 +14,8 @@ go_library(
 | 
			
		||||
    tags = ["automanaged"],
 | 
			
		||||
    deps = [
 | 
			
		||||
        "//pkg/probe:go_default_library",
 | 
			
		||||
        "//pkg/util/exec:go_default_library",
 | 
			
		||||
        "//vendor/github.com/golang/glog:go_default_library",
 | 
			
		||||
        "//vendor/k8s.io/utils/exec:go_default_library",
 | 
			
		||||
    ],
 | 
			
		||||
)
 | 
			
		||||
 | 
			
		||||
 
 | 
			
		||||
@@ -18,7 +18,7 @@ package exec
 | 
			
		||||
 | 
			
		||||
import (
 | 
			
		||||
	"k8s.io/kubernetes/pkg/probe"
 | 
			
		||||
	"k8s.io/kubernetes/pkg/util/exec"
 | 
			
		||||
	"k8s.io/utils/exec"
 | 
			
		||||
 | 
			
		||||
	"github.com/golang/glog"
 | 
			
		||||
)
 | 
			
		||||
 
 | 
			
		||||
@@ -24,7 +24,6 @@ go_library(
 | 
			
		||||
        "//pkg/proxy/healthcheck:go_default_library",
 | 
			
		||||
        "//pkg/proxy/util:go_default_library",
 | 
			
		||||
        "//pkg/util/async:go_default_library",
 | 
			
		||||
        "//pkg/util/exec:go_default_library",
 | 
			
		||||
        "//pkg/util/iptables:go_default_library",
 | 
			
		||||
        "//pkg/util/sysctl:go_default_library",
 | 
			
		||||
        "//pkg/util/version:go_default_library",
 | 
			
		||||
@@ -36,6 +35,7 @@ go_library(
 | 
			
		||||
        "//vendor/k8s.io/apimachinery/pkg/util/wait:go_default_library",
 | 
			
		||||
        "//vendor/k8s.io/apiserver/pkg/util/feature:go_default_library",
 | 
			
		||||
        "//vendor/k8s.io/client-go/tools/record:go_default_library",
 | 
			
		||||
        "//vendor/k8s.io/utils/exec:go_default_library",
 | 
			
		||||
    ],
 | 
			
		||||
)
 | 
			
		||||
 | 
			
		||||
@@ -48,7 +48,6 @@ go_test(
 | 
			
		||||
        "//pkg/api:go_default_library",
 | 
			
		||||
        "//pkg/proxy:go_default_library",
 | 
			
		||||
        "//pkg/util/async:go_default_library",
 | 
			
		||||
        "//pkg/util/exec:go_default_library",
 | 
			
		||||
        "//pkg/util/iptables:go_default_library",
 | 
			
		||||
        "//pkg/util/iptables/testing:go_default_library",
 | 
			
		||||
        "//vendor/github.com/davecgh/go-spew/spew:go_default_library",
 | 
			
		||||
@@ -56,6 +55,8 @@ go_test(
 | 
			
		||||
        "//vendor/k8s.io/apimachinery/pkg/types:go_default_library",
 | 
			
		||||
        "//vendor/k8s.io/apimachinery/pkg/util/intstr:go_default_library",
 | 
			
		||||
        "//vendor/k8s.io/apimachinery/pkg/util/sets:go_default_library",
 | 
			
		||||
        "//vendor/k8s.io/utils/exec:go_default_library",
 | 
			
		||||
        "//vendor/k8s.io/utils/exec/testing:go_default_library",
 | 
			
		||||
    ],
 | 
			
		||||
)
 | 
			
		||||
 | 
			
		||||
 
 | 
			
		||||
@@ -49,10 +49,10 @@ import (
 | 
			
		||||
	"k8s.io/kubernetes/pkg/proxy/healthcheck"
 | 
			
		||||
	utilproxy "k8s.io/kubernetes/pkg/proxy/util"
 | 
			
		||||
	"k8s.io/kubernetes/pkg/util/async"
 | 
			
		||||
	utilexec "k8s.io/kubernetes/pkg/util/exec"
 | 
			
		||||
	utiliptables "k8s.io/kubernetes/pkg/util/iptables"
 | 
			
		||||
	utilsysctl "k8s.io/kubernetes/pkg/util/sysctl"
 | 
			
		||||
	utilversion "k8s.io/kubernetes/pkg/util/version"
 | 
			
		||||
	utilexec "k8s.io/utils/exec"
 | 
			
		||||
)
 | 
			
		||||
 | 
			
		||||
const (
 | 
			
		||||
 
 | 
			
		||||
@@ -36,9 +36,10 @@ import (
 | 
			
		||||
	"k8s.io/kubernetes/pkg/api"
 | 
			
		||||
	"k8s.io/kubernetes/pkg/proxy"
 | 
			
		||||
	"k8s.io/kubernetes/pkg/util/async"
 | 
			
		||||
	"k8s.io/kubernetes/pkg/util/exec"
 | 
			
		||||
	utiliptables "k8s.io/kubernetes/pkg/util/iptables"
 | 
			
		||||
	iptablestest "k8s.io/kubernetes/pkg/util/iptables/testing"
 | 
			
		||||
	"k8s.io/utils/exec"
 | 
			
		||||
	fakeexec "k8s.io/utils/exec/testing"
 | 
			
		||||
)
 | 
			
		||||
 | 
			
		||||
func checkAllLines(t *testing.T, table utiliptables.Table, save []byte, expectedLines map[utiliptables.Chain]string) {
 | 
			
		||||
@@ -187,18 +188,18 @@ func newFakeServiceInfo(service proxy.ServicePortName, ip net.IP, port int, prot
 | 
			
		||||
}
 | 
			
		||||
 | 
			
		||||
func TestDeleteEndpointConnections(t *testing.T) {
 | 
			
		||||
	fcmd := exec.FakeCmd{
 | 
			
		||||
		CombinedOutputScript: []exec.FakeCombinedOutputAction{
 | 
			
		||||
	fcmd := fakeexec.FakeCmd{
 | 
			
		||||
		CombinedOutputScript: []fakeexec.FakeCombinedOutputAction{
 | 
			
		||||
			func() ([]byte, error) { return []byte("1 flow entries have been deleted"), nil },
 | 
			
		||||
			func() ([]byte, error) {
 | 
			
		||||
				return []byte(""), fmt.Errorf("conntrack v1.4.2 (conntrack-tools): 0 flow entries have been deleted.")
 | 
			
		||||
			},
 | 
			
		||||
		},
 | 
			
		||||
	}
 | 
			
		||||
	fexec := exec.FakeExec{
 | 
			
		||||
		CommandScript: []exec.FakeCommandAction{
 | 
			
		||||
			func(cmd string, args ...string) exec.Cmd { return exec.InitFakeCmd(&fcmd, cmd, args...) },
 | 
			
		||||
			func(cmd string, args ...string) exec.Cmd { return exec.InitFakeCmd(&fcmd, cmd, args...) },
 | 
			
		||||
	fexec := fakeexec.FakeExec{
 | 
			
		||||
		CommandScript: []fakeexec.FakeCommandAction{
 | 
			
		||||
			func(cmd string, args ...string) exec.Cmd { return fakeexec.InitFakeCmd(&fcmd, cmd, args...) },
 | 
			
		||||
			func(cmd string, args ...string) exec.Cmd { return fakeexec.InitFakeCmd(&fcmd, cmd, args...) },
 | 
			
		||||
		},
 | 
			
		||||
		LookPathFunc: func(cmd string) (string, error) { return cmd, nil },
 | 
			
		||||
	}
 | 
			
		||||
@@ -386,7 +387,7 @@ func NewFakeProxier(ipt utiliptables.Interface) *Proxier {
 | 
			
		||||
	// TODO: Call NewProxier after refactoring out the goroutine
 | 
			
		||||
	// invocation into a Run() method.
 | 
			
		||||
	p := &Proxier{
 | 
			
		||||
		exec:                     &exec.FakeExec{},
 | 
			
		||||
		exec:                     &fakeexec.FakeExec{},
 | 
			
		||||
		serviceMap:               make(proxyServiceMap),
 | 
			
		||||
		serviceChanges:           newServiceChangeMap(),
 | 
			
		||||
		endpointsMap:             make(proxyEndpointsMap),
 | 
			
		||||
 
 | 
			
		||||
@@ -25,7 +25,6 @@ go_library(
 | 
			
		||||
        "//pkg/api/helper:go_default_library",
 | 
			
		||||
        "//pkg/proxy:go_default_library",
 | 
			
		||||
        "//pkg/proxy/util:go_default_library",
 | 
			
		||||
        "//pkg/util/exec:go_default_library",
 | 
			
		||||
        "//pkg/util/iptables:go_default_library",
 | 
			
		||||
        "//pkg/util/slice:go_default_library",
 | 
			
		||||
        "//vendor/github.com/golang/glog:go_default_library",
 | 
			
		||||
@@ -35,6 +34,7 @@ go_library(
 | 
			
		||||
        "//vendor/k8s.io/apimachinery/pkg/util/runtime:go_default_library",
 | 
			
		||||
        "//vendor/k8s.io/apimachinery/pkg/util/sets:go_default_library",
 | 
			
		||||
        "//vendor/k8s.io/apimachinery/pkg/util/wait:go_default_library",
 | 
			
		||||
        "//vendor/k8s.io/utils/exec:go_default_library",
 | 
			
		||||
    ],
 | 
			
		||||
)
 | 
			
		||||
 | 
			
		||||
@@ -50,12 +50,13 @@ go_test(
 | 
			
		||||
    deps = [
 | 
			
		||||
        "//pkg/api:go_default_library",
 | 
			
		||||
        "//pkg/proxy:go_default_library",
 | 
			
		||||
        "//pkg/util/exec:go_default_library",
 | 
			
		||||
        "//pkg/util/iptables/testing:go_default_library",
 | 
			
		||||
        "//vendor/k8s.io/apimachinery/pkg/apis/meta/v1:go_default_library",
 | 
			
		||||
        "//vendor/k8s.io/apimachinery/pkg/types:go_default_library",
 | 
			
		||||
        "//vendor/k8s.io/apimachinery/pkg/util/net:go_default_library",
 | 
			
		||||
        "//vendor/k8s.io/apimachinery/pkg/util/runtime:go_default_library",
 | 
			
		||||
        "//vendor/k8s.io/utils/exec:go_default_library",
 | 
			
		||||
        "//vendor/k8s.io/utils/exec/testing:go_default_library",
 | 
			
		||||
    ],
 | 
			
		||||
)
 | 
			
		||||
 | 
			
		||||
 
 | 
			
		||||
@@ -36,8 +36,8 @@ import (
 | 
			
		||||
	"k8s.io/apimachinery/pkg/util/runtime"
 | 
			
		||||
	"k8s.io/apimachinery/pkg/util/sets"
 | 
			
		||||
	utilproxy "k8s.io/kubernetes/pkg/proxy/util"
 | 
			
		||||
	utilexec "k8s.io/kubernetes/pkg/util/exec"
 | 
			
		||||
	"k8s.io/kubernetes/pkg/util/iptables"
 | 
			
		||||
	utilexec "k8s.io/utils/exec"
 | 
			
		||||
)
 | 
			
		||||
 | 
			
		||||
type portal struct {
 | 
			
		||||
 
 | 
			
		||||
@@ -34,8 +34,9 @@ import (
 | 
			
		||||
	"k8s.io/apimachinery/pkg/util/runtime"
 | 
			
		||||
	"k8s.io/kubernetes/pkg/api"
 | 
			
		||||
	"k8s.io/kubernetes/pkg/proxy"
 | 
			
		||||
	"k8s.io/kubernetes/pkg/util/exec"
 | 
			
		||||
	ipttest "k8s.io/kubernetes/pkg/util/iptables/testing"
 | 
			
		||||
	"k8s.io/utils/exec"
 | 
			
		||||
	fakeexec "k8s.io/utils/exec/testing"
 | 
			
		||||
)
 | 
			
		||||
 | 
			
		||||
const (
 | 
			
		||||
@@ -905,15 +906,15 @@ func TestProxyUpdatePortal(t *testing.T) {
 | 
			
		||||
	waitForNumProxyLoops(t, p, 1)
 | 
			
		||||
}
 | 
			
		||||
 | 
			
		||||
func makeFakeExec() *exec.FakeExec {
 | 
			
		||||
	fcmd := exec.FakeCmd{
 | 
			
		||||
		CombinedOutputScript: []exec.FakeCombinedOutputAction{
 | 
			
		||||
func makeFakeExec() *fakeexec.FakeExec {
 | 
			
		||||
	fcmd := fakeexec.FakeCmd{
 | 
			
		||||
		CombinedOutputScript: []fakeexec.FakeCombinedOutputAction{
 | 
			
		||||
			func() ([]byte, error) { return []byte("1 flow entries have been deleted"), nil },
 | 
			
		||||
		},
 | 
			
		||||
	}
 | 
			
		||||
	return &exec.FakeExec{
 | 
			
		||||
		CommandScript: []exec.FakeCommandAction{
 | 
			
		||||
			func(cmd string, args ...string) exec.Cmd { return exec.InitFakeCmd(&fcmd, cmd, args...) },
 | 
			
		||||
	return &fakeexec.FakeExec{
 | 
			
		||||
		CommandScript: []fakeexec.FakeCommandAction{
 | 
			
		||||
			func(cmd string, args ...string) exec.Cmd { return fakeexec.InitFakeCmd(&fcmd, cmd, args...) },
 | 
			
		||||
		},
 | 
			
		||||
		LookPathFunc: func(cmd string) (string, error) { return cmd, nil },
 | 
			
		||||
	}
 | 
			
		||||
 
 | 
			
		||||
@@ -13,8 +13,8 @@ go_library(
 | 
			
		||||
    srcs = ["conntrack.go"],
 | 
			
		||||
    tags = ["automanaged"],
 | 
			
		||||
    deps = [
 | 
			
		||||
        "//pkg/util/exec:go_default_library",
 | 
			
		||||
        "//vendor/github.com/golang/glog:go_default_library",
 | 
			
		||||
        "//vendor/k8s.io/utils/exec:go_default_library",
 | 
			
		||||
    ],
 | 
			
		||||
)
 | 
			
		||||
 | 
			
		||||
@@ -23,7 +23,10 @@ go_test(
 | 
			
		||||
    srcs = ["conntrack_test.go"],
 | 
			
		||||
    library = ":go_default_library",
 | 
			
		||||
    tags = ["automanaged"],
 | 
			
		||||
    deps = ["//pkg/util/exec:go_default_library"],
 | 
			
		||||
    deps = [
 | 
			
		||||
        "//vendor/k8s.io/utils/exec:go_default_library",
 | 
			
		||||
        "//vendor/k8s.io/utils/exec/testing:go_default_library",
 | 
			
		||||
    ],
 | 
			
		||||
)
 | 
			
		||||
 | 
			
		||||
filegroup(
 | 
			
		||||
 
 | 
			
		||||
@@ -20,7 +20,7 @@ import (
 | 
			
		||||
	"fmt"
 | 
			
		||||
	"strings"
 | 
			
		||||
 | 
			
		||||
	"k8s.io/kubernetes/pkg/util/exec"
 | 
			
		||||
	"k8s.io/utils/exec"
 | 
			
		||||
 | 
			
		||||
	"github.com/golang/glog"
 | 
			
		||||
)
 | 
			
		||||
 
 | 
			
		||||
@@ -21,12 +21,13 @@ import (
 | 
			
		||||
	"strings"
 | 
			
		||||
	"testing"
 | 
			
		||||
 | 
			
		||||
	"k8s.io/kubernetes/pkg/util/exec"
 | 
			
		||||
	"k8s.io/utils/exec"
 | 
			
		||||
	fakeexec "k8s.io/utils/exec/testing"
 | 
			
		||||
)
 | 
			
		||||
 | 
			
		||||
func TestExecConntrackTool(t *testing.T) {
 | 
			
		||||
	fcmd := exec.FakeCmd{
 | 
			
		||||
		CombinedOutputScript: []exec.FakeCombinedOutputAction{
 | 
			
		||||
	fcmd := fakeexec.FakeCmd{
 | 
			
		||||
		CombinedOutputScript: []fakeexec.FakeCombinedOutputAction{
 | 
			
		||||
			func() ([]byte, error) { return []byte("1 flow entries have been deleted"), nil },
 | 
			
		||||
			func() ([]byte, error) { return []byte("1 flow entries have been deleted"), nil },
 | 
			
		||||
			func() ([]byte, error) {
 | 
			
		||||
@@ -34,11 +35,11 @@ func TestExecConntrackTool(t *testing.T) {
 | 
			
		||||
			},
 | 
			
		||||
		},
 | 
			
		||||
	}
 | 
			
		||||
	fexec := exec.FakeExec{
 | 
			
		||||
		CommandScript: []exec.FakeCommandAction{
 | 
			
		||||
			func(cmd string, args ...string) exec.Cmd { return exec.InitFakeCmd(&fcmd, cmd, args...) },
 | 
			
		||||
			func(cmd string, args ...string) exec.Cmd { return exec.InitFakeCmd(&fcmd, cmd, args...) },
 | 
			
		||||
			func(cmd string, args ...string) exec.Cmd { return exec.InitFakeCmd(&fcmd, cmd, args...) },
 | 
			
		||||
	fexec := fakeexec.FakeExec{
 | 
			
		||||
		CommandScript: []fakeexec.FakeCommandAction{
 | 
			
		||||
			func(cmd string, args ...string) exec.Cmd { return fakeexec.InitFakeCmd(&fcmd, cmd, args...) },
 | 
			
		||||
			func(cmd string, args ...string) exec.Cmd { return fakeexec.InitFakeCmd(&fcmd, cmd, args...) },
 | 
			
		||||
			func(cmd string, args ...string) exec.Cmd { return fakeexec.InitFakeCmd(&fcmd, cmd, args...) },
 | 
			
		||||
		},
 | 
			
		||||
		LookPathFunc: func(cmd string) (string, error) { return cmd, nil },
 | 
			
		||||
	}
 | 
			
		||||
@@ -74,8 +75,8 @@ func TestExecConntrackTool(t *testing.T) {
 | 
			
		||||
}
 | 
			
		||||
 | 
			
		||||
func TestDeleteServiceConnections(t *testing.T) {
 | 
			
		||||
	fcmd := exec.FakeCmd{
 | 
			
		||||
		CombinedOutputScript: []exec.FakeCombinedOutputAction{
 | 
			
		||||
	fcmd := fakeexec.FakeCmd{
 | 
			
		||||
		CombinedOutputScript: []fakeexec.FakeCombinedOutputAction{
 | 
			
		||||
			func() ([]byte, error) { return []byte("1 flow entries have been deleted"), nil },
 | 
			
		||||
			func() ([]byte, error) { return []byte("1 flow entries have been deleted"), nil },
 | 
			
		||||
			func() ([]byte, error) {
 | 
			
		||||
@@ -83,11 +84,11 @@ func TestDeleteServiceConnections(t *testing.T) {
 | 
			
		||||
			},
 | 
			
		||||
		},
 | 
			
		||||
	}
 | 
			
		||||
	fexec := exec.FakeExec{
 | 
			
		||||
		CommandScript: []exec.FakeCommandAction{
 | 
			
		||||
			func(cmd string, args ...string) exec.Cmd { return exec.InitFakeCmd(&fcmd, cmd, args...) },
 | 
			
		||||
			func(cmd string, args ...string) exec.Cmd { return exec.InitFakeCmd(&fcmd, cmd, args...) },
 | 
			
		||||
			func(cmd string, args ...string) exec.Cmd { return exec.InitFakeCmd(&fcmd, cmd, args...) },
 | 
			
		||||
	fexec := fakeexec.FakeExec{
 | 
			
		||||
		CommandScript: []fakeexec.FakeCommandAction{
 | 
			
		||||
			func(cmd string, args ...string) exec.Cmd { return fakeexec.InitFakeCmd(&fcmd, cmd, args...) },
 | 
			
		||||
			func(cmd string, args ...string) exec.Cmd { return fakeexec.InitFakeCmd(&fcmd, cmd, args...) },
 | 
			
		||||
			func(cmd string, args ...string) exec.Cmd { return fakeexec.InitFakeCmd(&fcmd, cmd, args...) },
 | 
			
		||||
		},
 | 
			
		||||
		LookPathFunc: func(cmd string) (string, error) { return cmd, nil },
 | 
			
		||||
	}
 | 
			
		||||
 
 | 
			
		||||
@@ -23,7 +23,6 @@ go_library(
 | 
			
		||||
        "//pkg/api:go_default_library",
 | 
			
		||||
        "//pkg/api/helper:go_default_library",
 | 
			
		||||
        "//pkg/proxy:go_default_library",
 | 
			
		||||
        "//pkg/util/exec:go_default_library",
 | 
			
		||||
        "//pkg/util/ipconfig:go_default_library",
 | 
			
		||||
        "//pkg/util/netsh:go_default_library",
 | 
			
		||||
        "//pkg/util/slice:go_default_library",
 | 
			
		||||
@@ -32,6 +31,7 @@ go_library(
 | 
			
		||||
        "//vendor/k8s.io/apimachinery/pkg/types:go_default_library",
 | 
			
		||||
        "//vendor/k8s.io/apimachinery/pkg/util/net:go_default_library",
 | 
			
		||||
        "//vendor/k8s.io/apimachinery/pkg/util/runtime:go_default_library",
 | 
			
		||||
        "//vendor/k8s.io/utils/exec:go_default_library",
 | 
			
		||||
    ],
 | 
			
		||||
)
 | 
			
		||||
 | 
			
		||||
 
 | 
			
		||||
@@ -32,8 +32,8 @@ import (
 | 
			
		||||
	"k8s.io/apimachinery/pkg/util/runtime"
 | 
			
		||||
	"k8s.io/kubernetes/pkg/api"
 | 
			
		||||
	"k8s.io/kubernetes/pkg/proxy"
 | 
			
		||||
	"k8s.io/kubernetes/pkg/util/exec"
 | 
			
		||||
	"k8s.io/kubernetes/pkg/util/ipconfig"
 | 
			
		||||
	"k8s.io/utils/exec"
 | 
			
		||||
)
 | 
			
		||||
 | 
			
		||||
const (
 | 
			
		||||
 
 | 
			
		||||
@@ -20,7 +20,6 @@ filegroup(
 | 
			
		||||
        "//pkg/util/dbus:all-srcs",
 | 
			
		||||
        "//pkg/util/ebtables:all-srcs",
 | 
			
		||||
        "//pkg/util/env:all-srcs",
 | 
			
		||||
        "//pkg/util/exec:all-srcs",
 | 
			
		||||
        "//pkg/util/file:all-srcs",
 | 
			
		||||
        "//pkg/util/flock:all-srcs",
 | 
			
		||||
        "//pkg/util/goroutinemap:all-srcs",
 | 
			
		||||
 
 | 
			
		||||
@@ -19,10 +19,10 @@ go_library(
 | 
			
		||||
    ],
 | 
			
		||||
    tags = ["automanaged"],
 | 
			
		||||
    deps = [
 | 
			
		||||
        "//pkg/util/exec:go_default_library",
 | 
			
		||||
        "//vendor/github.com/golang/glog:go_default_library",
 | 
			
		||||
        "//vendor/k8s.io/apimachinery/pkg/api/resource:go_default_library",
 | 
			
		||||
        "//vendor/k8s.io/apimachinery/pkg/util/sets:go_default_library",
 | 
			
		||||
        "//vendor/k8s.io/utils/exec:go_default_library",
 | 
			
		||||
    ],
 | 
			
		||||
)
 | 
			
		||||
 | 
			
		||||
@@ -36,9 +36,10 @@ go_test(
 | 
			
		||||
    tags = ["automanaged"],
 | 
			
		||||
    deps = [
 | 
			
		||||
        "//pkg/api:go_default_library",
 | 
			
		||||
        "//pkg/util/exec:go_default_library",
 | 
			
		||||
        "//vendor/k8s.io/apimachinery/pkg/api/resource:go_default_library",
 | 
			
		||||
        "//vendor/k8s.io/apimachinery/pkg/apis/meta/v1:go_default_library",
 | 
			
		||||
        "//vendor/k8s.io/utils/exec:go_default_library",
 | 
			
		||||
        "//vendor/k8s.io/utils/exec/testing:go_default_library",
 | 
			
		||||
    ],
 | 
			
		||||
)
 | 
			
		||||
 | 
			
		||||
 
 | 
			
		||||
@@ -28,7 +28,7 @@ import (
 | 
			
		||||
 | 
			
		||||
	"k8s.io/apimachinery/pkg/api/resource"
 | 
			
		||||
	"k8s.io/apimachinery/pkg/util/sets"
 | 
			
		||||
	"k8s.io/kubernetes/pkg/util/exec"
 | 
			
		||||
	"k8s.io/utils/exec"
 | 
			
		||||
 | 
			
		||||
	"github.com/golang/glog"
 | 
			
		||||
)
 | 
			
		||||
 
 | 
			
		||||
@@ -25,7 +25,8 @@ import (
 | 
			
		||||
	"testing"
 | 
			
		||||
 | 
			
		||||
	"k8s.io/apimachinery/pkg/api/resource"
 | 
			
		||||
	"k8s.io/kubernetes/pkg/util/exec"
 | 
			
		||||
	"k8s.io/utils/exec"
 | 
			
		||||
	fakeexec "k8s.io/utils/exec/testing"
 | 
			
		||||
)
 | 
			
		||||
 | 
			
		||||
var tcClassOutput = `class htb 1:1 root prio 0 rate 10000bit ceil 10000bit burst 1600b cburst 1600b 
 | 
			
		||||
@@ -63,15 +64,15 @@ func TestNextClassID(t *testing.T) {
 | 
			
		||||
		},
 | 
			
		||||
	}
 | 
			
		||||
	for _, test := range tests {
 | 
			
		||||
		fcmd := exec.FakeCmd{
 | 
			
		||||
			CombinedOutputScript: []exec.FakeCombinedOutputAction{
 | 
			
		||||
		fcmd := fakeexec.FakeCmd{
 | 
			
		||||
			CombinedOutputScript: []fakeexec.FakeCombinedOutputAction{
 | 
			
		||||
				func() ([]byte, error) { return []byte(test.output), test.err },
 | 
			
		||||
			},
 | 
			
		||||
		}
 | 
			
		||||
		fexec := exec.FakeExec{
 | 
			
		||||
			CommandScript: []exec.FakeCommandAction{
 | 
			
		||||
		fexec := fakeexec.FakeExec{
 | 
			
		||||
			CommandScript: []fakeexec.FakeCommandAction{
 | 
			
		||||
				func(cmd string, args ...string) exec.Cmd {
 | 
			
		||||
					return exec.InitFakeCmd(&fcmd, cmd, args...)
 | 
			
		||||
					return fakeexec.InitFakeCmd(&fcmd, cmd, args...)
 | 
			
		||||
				},
 | 
			
		||||
			},
 | 
			
		||||
		}
 | 
			
		||||
@@ -245,15 +246,15 @@ func TestFindCIDRClass(t *testing.T) {
 | 
			
		||||
		},
 | 
			
		||||
	}
 | 
			
		||||
	for _, test := range tests {
 | 
			
		||||
		fcmd := exec.FakeCmd{
 | 
			
		||||
			CombinedOutputScript: []exec.FakeCombinedOutputAction{
 | 
			
		||||
		fcmd := fakeexec.FakeCmd{
 | 
			
		||||
			CombinedOutputScript: []fakeexec.FakeCombinedOutputAction{
 | 
			
		||||
				func() ([]byte, error) { return []byte(test.output), test.err },
 | 
			
		||||
			},
 | 
			
		||||
		}
 | 
			
		||||
		fexec := exec.FakeExec{
 | 
			
		||||
			CommandScript: []exec.FakeCommandAction{
 | 
			
		||||
		fexec := fakeexec.FakeExec{
 | 
			
		||||
			CommandScript: []fakeexec.FakeCommandAction{
 | 
			
		||||
				func(cmd string, args ...string) exec.Cmd {
 | 
			
		||||
					return exec.InitFakeCmd(&fcmd, cmd, args...)
 | 
			
		||||
					return fakeexec.InitFakeCmd(&fcmd, cmd, args...)
 | 
			
		||||
				},
 | 
			
		||||
			},
 | 
			
		||||
		}
 | 
			
		||||
@@ -284,15 +285,15 @@ func TestFindCIDRClass(t *testing.T) {
 | 
			
		||||
}
 | 
			
		||||
 | 
			
		||||
func TestGetCIDRs(t *testing.T) {
 | 
			
		||||
	fcmd := exec.FakeCmd{
 | 
			
		||||
		CombinedOutputScript: []exec.FakeCombinedOutputAction{
 | 
			
		||||
	fcmd := fakeexec.FakeCmd{
 | 
			
		||||
		CombinedOutputScript: []fakeexec.FakeCombinedOutputAction{
 | 
			
		||||
			func() ([]byte, error) { return []byte(tcFilterOutput), nil },
 | 
			
		||||
		},
 | 
			
		||||
	}
 | 
			
		||||
	fexec := exec.FakeExec{
 | 
			
		||||
		CommandScript: []exec.FakeCommandAction{
 | 
			
		||||
	fexec := fakeexec.FakeExec{
 | 
			
		||||
		CommandScript: []fakeexec.FakeCommandAction{
 | 
			
		||||
			func(cmd string, args ...string) exec.Cmd {
 | 
			
		||||
				return exec.InitFakeCmd(&fcmd, cmd, args...)
 | 
			
		||||
				return fakeexec.InitFakeCmd(&fcmd, cmd, args...)
 | 
			
		||||
			},
 | 
			
		||||
		},
 | 
			
		||||
	}
 | 
			
		||||
@@ -349,8 +350,8 @@ func TestLimit(t *testing.T) {
 | 
			
		||||
	}
 | 
			
		||||
 | 
			
		||||
	for _, test := range tests {
 | 
			
		||||
		fcmd := exec.FakeCmd{
 | 
			
		||||
			CombinedOutputScript: []exec.FakeCombinedOutputAction{
 | 
			
		||||
		fcmd := fakeexec.FakeCmd{
 | 
			
		||||
			CombinedOutputScript: []fakeexec.FakeCombinedOutputAction{
 | 
			
		||||
				func() ([]byte, error) { return []byte(tcClassOutput), test.err },
 | 
			
		||||
				func() ([]byte, error) { return []byte{}, test.err },
 | 
			
		||||
				func() ([]byte, error) { return []byte{}, test.err },
 | 
			
		||||
@@ -360,14 +361,14 @@ func TestLimit(t *testing.T) {
 | 
			
		||||
			},
 | 
			
		||||
		}
 | 
			
		||||
 | 
			
		||||
		fexec := exec.FakeExec{
 | 
			
		||||
			CommandScript: []exec.FakeCommandAction{
 | 
			
		||||
				func(cmd string, args ...string) exec.Cmd { return exec.InitFakeCmd(&fcmd, cmd, args...) },
 | 
			
		||||
				func(cmd string, args ...string) exec.Cmd { return exec.InitFakeCmd(&fcmd, cmd, args...) },
 | 
			
		||||
				func(cmd string, args ...string) exec.Cmd { return exec.InitFakeCmd(&fcmd, cmd, args...) },
 | 
			
		||||
				func(cmd string, args ...string) exec.Cmd { return exec.InitFakeCmd(&fcmd, cmd, args...) },
 | 
			
		||||
				func(cmd string, args ...string) exec.Cmd { return exec.InitFakeCmd(&fcmd, cmd, args...) },
 | 
			
		||||
				func(cmd string, args ...string) exec.Cmd { return exec.InitFakeCmd(&fcmd, cmd, args...) },
 | 
			
		||||
		fexec := fakeexec.FakeExec{
 | 
			
		||||
			CommandScript: []fakeexec.FakeCommandAction{
 | 
			
		||||
				func(cmd string, args ...string) exec.Cmd { return fakeexec.InitFakeCmd(&fcmd, cmd, args...) },
 | 
			
		||||
				func(cmd string, args ...string) exec.Cmd { return fakeexec.InitFakeCmd(&fcmd, cmd, args...) },
 | 
			
		||||
				func(cmd string, args ...string) exec.Cmd { return fakeexec.InitFakeCmd(&fcmd, cmd, args...) },
 | 
			
		||||
				func(cmd string, args ...string) exec.Cmd { return fakeexec.InitFakeCmd(&fcmd, cmd, args...) },
 | 
			
		||||
				func(cmd string, args ...string) exec.Cmd { return fakeexec.InitFakeCmd(&fcmd, cmd, args...) },
 | 
			
		||||
				func(cmd string, args ...string) exec.Cmd { return fakeexec.InitFakeCmd(&fcmd, cmd, args...) },
 | 
			
		||||
			},
 | 
			
		||||
		}
 | 
			
		||||
		iface := "cbr0"
 | 
			
		||||
@@ -465,19 +466,19 @@ func TestReset(t *testing.T) {
 | 
			
		||||
		},
 | 
			
		||||
	}
 | 
			
		||||
	for _, test := range tests {
 | 
			
		||||
		fcmd := exec.FakeCmd{
 | 
			
		||||
			CombinedOutputScript: []exec.FakeCombinedOutputAction{
 | 
			
		||||
		fcmd := fakeexec.FakeCmd{
 | 
			
		||||
			CombinedOutputScript: []fakeexec.FakeCombinedOutputAction{
 | 
			
		||||
				func() ([]byte, error) { return []byte(tcFilterOutput), test.err },
 | 
			
		||||
				func() ([]byte, error) { return []byte{}, test.err },
 | 
			
		||||
				func() ([]byte, error) { return []byte{}, test.err },
 | 
			
		||||
			},
 | 
			
		||||
		}
 | 
			
		||||
 | 
			
		||||
		fexec := exec.FakeExec{
 | 
			
		||||
			CommandScript: []exec.FakeCommandAction{
 | 
			
		||||
				func(cmd string, args ...string) exec.Cmd { return exec.InitFakeCmd(&fcmd, cmd, args...) },
 | 
			
		||||
				func(cmd string, args ...string) exec.Cmd { return exec.InitFakeCmd(&fcmd, cmd, args...) },
 | 
			
		||||
				func(cmd string, args ...string) exec.Cmd { return exec.InitFakeCmd(&fcmd, cmd, args...) },
 | 
			
		||||
		fexec := fakeexec.FakeExec{
 | 
			
		||||
			CommandScript: []fakeexec.FakeCommandAction{
 | 
			
		||||
				func(cmd string, args ...string) exec.Cmd { return fakeexec.InitFakeCmd(&fcmd, cmd, args...) },
 | 
			
		||||
				func(cmd string, args ...string) exec.Cmd { return fakeexec.InitFakeCmd(&fcmd, cmd, args...) },
 | 
			
		||||
				func(cmd string, args ...string) exec.Cmd { return fakeexec.InitFakeCmd(&fcmd, cmd, args...) },
 | 
			
		||||
			},
 | 
			
		||||
		}
 | 
			
		||||
		iface := "cbr0"
 | 
			
		||||
@@ -524,15 +525,15 @@ func TestReset(t *testing.T) {
 | 
			
		||||
var tcQdisc = "qdisc htb 1: root refcnt 2 r2q 10 default 30 direct_packets_stat 0\n"
 | 
			
		||||
 | 
			
		||||
func TestReconcileInterfaceExists(t *testing.T) {
 | 
			
		||||
	fcmd := exec.FakeCmd{
 | 
			
		||||
		CombinedOutputScript: []exec.FakeCombinedOutputAction{
 | 
			
		||||
	fcmd := fakeexec.FakeCmd{
 | 
			
		||||
		CombinedOutputScript: []fakeexec.FakeCombinedOutputAction{
 | 
			
		||||
			func() ([]byte, error) { return []byte(tcQdisc), nil },
 | 
			
		||||
		},
 | 
			
		||||
	}
 | 
			
		||||
 | 
			
		||||
	fexec := exec.FakeExec{
 | 
			
		||||
		CommandScript: []exec.FakeCommandAction{
 | 
			
		||||
			func(cmd string, args ...string) exec.Cmd { return exec.InitFakeCmd(&fcmd, cmd, args...) },
 | 
			
		||||
	fexec := fakeexec.FakeExec{
 | 
			
		||||
		CommandScript: []fakeexec.FakeCommandAction{
 | 
			
		||||
			func(cmd string, args ...string) exec.Cmd { return fakeexec.InitFakeCmd(&fcmd, cmd, args...) },
 | 
			
		||||
		},
 | 
			
		||||
	}
 | 
			
		||||
	iface := "cbr0"
 | 
			
		||||
@@ -562,17 +563,17 @@ func TestReconcileInterfaceExists(t *testing.T) {
 | 
			
		||||
}
 | 
			
		||||
 | 
			
		||||
func testReconcileInterfaceHasNoData(t *testing.T, output string) {
 | 
			
		||||
	fcmd := exec.FakeCmd{
 | 
			
		||||
		CombinedOutputScript: []exec.FakeCombinedOutputAction{
 | 
			
		||||
	fcmd := fakeexec.FakeCmd{
 | 
			
		||||
		CombinedOutputScript: []fakeexec.FakeCombinedOutputAction{
 | 
			
		||||
			func() ([]byte, error) { return []byte(output), nil },
 | 
			
		||||
			func() ([]byte, error) { return []byte(output), nil },
 | 
			
		||||
		},
 | 
			
		||||
	}
 | 
			
		||||
 | 
			
		||||
	fexec := exec.FakeExec{
 | 
			
		||||
		CommandScript: []exec.FakeCommandAction{
 | 
			
		||||
			func(cmd string, args ...string) exec.Cmd { return exec.InitFakeCmd(&fcmd, cmd, args...) },
 | 
			
		||||
			func(cmd string, args ...string) exec.Cmd { return exec.InitFakeCmd(&fcmd, cmd, args...) },
 | 
			
		||||
	fexec := fakeexec.FakeExec{
 | 
			
		||||
		CommandScript: []fakeexec.FakeCommandAction{
 | 
			
		||||
			func(cmd string, args ...string) exec.Cmd { return fakeexec.InitFakeCmd(&fcmd, cmd, args...) },
 | 
			
		||||
			func(cmd string, args ...string) exec.Cmd { return fakeexec.InitFakeCmd(&fcmd, cmd, args...) },
 | 
			
		||||
		},
 | 
			
		||||
	}
 | 
			
		||||
	iface := "cbr0"
 | 
			
		||||
@@ -635,19 +636,19 @@ var tcQdiscWrong = []string{
 | 
			
		||||
 | 
			
		||||
func TestReconcileInterfaceIsWrong(t *testing.T) {
 | 
			
		||||
	for _, test := range tcQdiscWrong {
 | 
			
		||||
		fcmd := exec.FakeCmd{
 | 
			
		||||
			CombinedOutputScript: []exec.FakeCombinedOutputAction{
 | 
			
		||||
		fcmd := fakeexec.FakeCmd{
 | 
			
		||||
			CombinedOutputScript: []fakeexec.FakeCombinedOutputAction{
 | 
			
		||||
				func() ([]byte, error) { return []byte(test), nil },
 | 
			
		||||
				func() ([]byte, error) { return []byte("\n"), nil },
 | 
			
		||||
				func() ([]byte, error) { return []byte("\n"), nil },
 | 
			
		||||
			},
 | 
			
		||||
		}
 | 
			
		||||
 | 
			
		||||
		fexec := exec.FakeExec{
 | 
			
		||||
			CommandScript: []exec.FakeCommandAction{
 | 
			
		||||
				func(cmd string, args ...string) exec.Cmd { return exec.InitFakeCmd(&fcmd, cmd, args...) },
 | 
			
		||||
				func(cmd string, args ...string) exec.Cmd { return exec.InitFakeCmd(&fcmd, cmd, args...) },
 | 
			
		||||
				func(cmd string, args ...string) exec.Cmd { return exec.InitFakeCmd(&fcmd, cmd, args...) },
 | 
			
		||||
		fexec := fakeexec.FakeExec{
 | 
			
		||||
			CommandScript: []fakeexec.FakeCommandAction{
 | 
			
		||||
				func(cmd string, args ...string) exec.Cmd { return fakeexec.InitFakeCmd(&fcmd, cmd, args...) },
 | 
			
		||||
				func(cmd string, args ...string) exec.Cmd { return fakeexec.InitFakeCmd(&fcmd, cmd, args...) },
 | 
			
		||||
				func(cmd string, args ...string) exec.Cmd { return fakeexec.InitFakeCmd(&fcmd, cmd, args...) },
 | 
			
		||||
			},
 | 
			
		||||
		}
 | 
			
		||||
		iface := "cbr0"
 | 
			
		||||
 
 | 
			
		||||
@@ -12,7 +12,7 @@ go_library(
 | 
			
		||||
    name = "go_default_library",
 | 
			
		||||
    srcs = ["ebtables.go"],
 | 
			
		||||
    tags = ["automanaged"],
 | 
			
		||||
    deps = ["//pkg/util/exec:go_default_library"],
 | 
			
		||||
    deps = ["//vendor/k8s.io/utils/exec:go_default_library"],
 | 
			
		||||
)
 | 
			
		||||
 | 
			
		||||
go_test(
 | 
			
		||||
@@ -20,7 +20,10 @@ go_test(
 | 
			
		||||
    srcs = ["ebtables_test.go"],
 | 
			
		||||
    library = ":go_default_library",
 | 
			
		||||
    tags = ["automanaged"],
 | 
			
		||||
    deps = ["//pkg/util/exec:go_default_library"],
 | 
			
		||||
    deps = [
 | 
			
		||||
        "//vendor/k8s.io/utils/exec:go_default_library",
 | 
			
		||||
        "//vendor/k8s.io/utils/exec/testing:go_default_library",
 | 
			
		||||
    ],
 | 
			
		||||
)
 | 
			
		||||
 | 
			
		||||
filegroup(
 | 
			
		||||
 
 | 
			
		||||
@@ -22,7 +22,7 @@ import (
 | 
			
		||||
	"strings"
 | 
			
		||||
	"sync"
 | 
			
		||||
 | 
			
		||||
	utilexec "k8s.io/kubernetes/pkg/util/exec"
 | 
			
		||||
	utilexec "k8s.io/utils/exec"
 | 
			
		||||
)
 | 
			
		||||
 | 
			
		||||
const (
 | 
			
		||||
 
 | 
			
		||||
@@ -20,31 +20,32 @@ import (
 | 
			
		||||
	"strings"
 | 
			
		||||
	"testing"
 | 
			
		||||
 | 
			
		||||
	"k8s.io/kubernetes/pkg/util/exec"
 | 
			
		||||
	"k8s.io/utils/exec"
 | 
			
		||||
	fakeexec "k8s.io/utils/exec/testing"
 | 
			
		||||
)
 | 
			
		||||
 | 
			
		||||
func TestEnsureChain(t *testing.T) {
 | 
			
		||||
	fcmd := exec.FakeCmd{
 | 
			
		||||
		CombinedOutputScript: []exec.FakeCombinedOutputAction{
 | 
			
		||||
	fcmd := fakeexec.FakeCmd{
 | 
			
		||||
		CombinedOutputScript: []fakeexec.FakeCombinedOutputAction{
 | 
			
		||||
			// Does not Exists
 | 
			
		||||
			func() ([]byte, error) { return nil, &exec.FakeExitError{Status: 1} },
 | 
			
		||||
			func() ([]byte, error) { return nil, &fakeexec.FakeExitError{Status: 1} },
 | 
			
		||||
			// Success
 | 
			
		||||
			func() ([]byte, error) { return []byte{}, nil },
 | 
			
		||||
			// Exists
 | 
			
		||||
			func() ([]byte, error) { return nil, nil },
 | 
			
		||||
			// Does not Exists
 | 
			
		||||
			func() ([]byte, error) { return nil, &exec.FakeExitError{Status: 1} },
 | 
			
		||||
			func() ([]byte, error) { return nil, &fakeexec.FakeExitError{Status: 1} },
 | 
			
		||||
			// Fail to create chain
 | 
			
		||||
			func() ([]byte, error) { return nil, &exec.FakeExitError{Status: 2} },
 | 
			
		||||
			func() ([]byte, error) { return nil, &fakeexec.FakeExitError{Status: 2} },
 | 
			
		||||
		},
 | 
			
		||||
	}
 | 
			
		||||
	fexec := exec.FakeExec{
 | 
			
		||||
		CommandScript: []exec.FakeCommandAction{
 | 
			
		||||
			func(cmd string, args ...string) exec.Cmd { return exec.InitFakeCmd(&fcmd, cmd, args...) },
 | 
			
		||||
			func(cmd string, args ...string) exec.Cmd { return exec.InitFakeCmd(&fcmd, cmd, args...) },
 | 
			
		||||
			func(cmd string, args ...string) exec.Cmd { return exec.InitFakeCmd(&fcmd, cmd, args...) },
 | 
			
		||||
			func(cmd string, args ...string) exec.Cmd { return exec.InitFakeCmd(&fcmd, cmd, args...) },
 | 
			
		||||
			func(cmd string, args ...string) exec.Cmd { return exec.InitFakeCmd(&fcmd, cmd, args...) },
 | 
			
		||||
	fexec := fakeexec.FakeExec{
 | 
			
		||||
		CommandScript: []fakeexec.FakeCommandAction{
 | 
			
		||||
			func(cmd string, args ...string) exec.Cmd { return fakeexec.InitFakeCmd(&fcmd, cmd, args...) },
 | 
			
		||||
			func(cmd string, args ...string) exec.Cmd { return fakeexec.InitFakeCmd(&fcmd, cmd, args...) },
 | 
			
		||||
			func(cmd string, args ...string) exec.Cmd { return fakeexec.InitFakeCmd(&fcmd, cmd, args...) },
 | 
			
		||||
			func(cmd string, args ...string) exec.Cmd { return fakeexec.InitFakeCmd(&fcmd, cmd, args...) },
 | 
			
		||||
			func(cmd string, args ...string) exec.Cmd { return fakeexec.InitFakeCmd(&fcmd, cmd, args...) },
 | 
			
		||||
		},
 | 
			
		||||
	}
 | 
			
		||||
 | 
			
		||||
@@ -76,8 +77,8 @@ func TestEnsureChain(t *testing.T) {
 | 
			
		||||
}
 | 
			
		||||
 | 
			
		||||
func TestEnsureRule(t *testing.T) {
 | 
			
		||||
	fcmd := exec.FakeCmd{
 | 
			
		||||
		CombinedOutputScript: []exec.FakeCombinedOutputAction{
 | 
			
		||||
	fcmd := fakeexec.FakeCmd{
 | 
			
		||||
		CombinedOutputScript: []fakeexec.FakeCombinedOutputAction{
 | 
			
		||||
			// Exists
 | 
			
		||||
			func() ([]byte, error) {
 | 
			
		||||
				return []byte(`Bridge table: filter
 | 
			
		||||
@@ -93,14 +94,14 @@ Bridge chain: OUTPUT, entries: 4, policy: ACCEPT
 | 
			
		||||
Bridge chain: TEST, entries: 0, policy: ACCEPT`), nil
 | 
			
		||||
			},
 | 
			
		||||
			// Fail to create
 | 
			
		||||
			func() ([]byte, error) { return nil, &exec.FakeExitError{Status: 2} },
 | 
			
		||||
			func() ([]byte, error) { return nil, &fakeexec.FakeExitError{Status: 2} },
 | 
			
		||||
		},
 | 
			
		||||
	}
 | 
			
		||||
	fexec := exec.FakeExec{
 | 
			
		||||
		CommandScript: []exec.FakeCommandAction{
 | 
			
		||||
			func(cmd string, args ...string) exec.Cmd { return exec.InitFakeCmd(&fcmd, cmd, args...) },
 | 
			
		||||
			func(cmd string, args ...string) exec.Cmd { return exec.InitFakeCmd(&fcmd, cmd, args...) },
 | 
			
		||||
			func(cmd string, args ...string) exec.Cmd { return exec.InitFakeCmd(&fcmd, cmd, args...) },
 | 
			
		||||
	fexec := fakeexec.FakeExec{
 | 
			
		||||
		CommandScript: []fakeexec.FakeCommandAction{
 | 
			
		||||
			func(cmd string, args ...string) exec.Cmd { return fakeexec.InitFakeCmd(&fcmd, cmd, args...) },
 | 
			
		||||
			func(cmd string, args ...string) exec.Cmd { return fakeexec.InitFakeCmd(&fcmd, cmd, args...) },
 | 
			
		||||
			func(cmd string, args ...string) exec.Cmd { return fakeexec.InitFakeCmd(&fcmd, cmd, args...) },
 | 
			
		||||
		},
 | 
			
		||||
	}
 | 
			
		||||
 | 
			
		||||
 
 | 
			
		||||
@@ -1,103 +0,0 @@
 | 
			
		||||
/*
 | 
			
		||||
Copyright 2014 The Kubernetes Authors.
 | 
			
		||||
 | 
			
		||||
Licensed under the Apache License, Version 2.0 (the "License");
 | 
			
		||||
you may not use this file except in compliance with the License.
 | 
			
		||||
You may obtain a copy of the License at
 | 
			
		||||
 | 
			
		||||
    http://www.apache.org/licenses/LICENSE-2.0
 | 
			
		||||
 | 
			
		||||
Unless required by applicable law or agreed to in writing, software
 | 
			
		||||
distributed under the License is distributed on an "AS IS" BASIS,
 | 
			
		||||
WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied.
 | 
			
		||||
See the License for the specific language governing permissions and
 | 
			
		||||
limitations under the License.
 | 
			
		||||
*/
 | 
			
		||||
 | 
			
		||||
package exec
 | 
			
		||||
 | 
			
		||||
import (
 | 
			
		||||
	osexec "os/exec"
 | 
			
		||||
	"testing"
 | 
			
		||||
)
 | 
			
		||||
 | 
			
		||||
func TestExecutorNoArgs(t *testing.T) {
 | 
			
		||||
	ex := New()
 | 
			
		||||
 | 
			
		||||
	cmd := ex.Command("true")
 | 
			
		||||
	out, err := cmd.CombinedOutput()
 | 
			
		||||
	if err != nil {
 | 
			
		||||
		t.Errorf("expected success, got %v", err)
 | 
			
		||||
	}
 | 
			
		||||
	if len(out) != 0 {
 | 
			
		||||
		t.Errorf("expected no output, got %q", string(out))
 | 
			
		||||
	}
 | 
			
		||||
 | 
			
		||||
	cmd = ex.Command("false")
 | 
			
		||||
	out, err = cmd.CombinedOutput()
 | 
			
		||||
	if err == nil {
 | 
			
		||||
		t.Errorf("expected failure, got nil error")
 | 
			
		||||
	}
 | 
			
		||||
	if len(out) != 0 {
 | 
			
		||||
		t.Errorf("expected no output, got %q", string(out))
 | 
			
		||||
	}
 | 
			
		||||
	ee, ok := err.(ExitError)
 | 
			
		||||
	if !ok {
 | 
			
		||||
		t.Errorf("expected an ExitError, got %+v", err)
 | 
			
		||||
	}
 | 
			
		||||
	if ee.Exited() {
 | 
			
		||||
		if code := ee.ExitStatus(); code != 1 {
 | 
			
		||||
			t.Errorf("expected exit status 1, got %d", code)
 | 
			
		||||
		}
 | 
			
		||||
	}
 | 
			
		||||
 | 
			
		||||
	cmd = ex.Command("/does/not/exist")
 | 
			
		||||
	out, err = cmd.CombinedOutput()
 | 
			
		||||
	if err == nil {
 | 
			
		||||
		t.Errorf("expected failure, got nil error")
 | 
			
		||||
	}
 | 
			
		||||
	if ee, ok := err.(ExitError); ok {
 | 
			
		||||
		t.Errorf("expected non-ExitError, got %+v", ee)
 | 
			
		||||
	}
 | 
			
		||||
}
 | 
			
		||||
 | 
			
		||||
func TestExecutorWithArgs(t *testing.T) {
 | 
			
		||||
	ex := New()
 | 
			
		||||
 | 
			
		||||
	cmd := ex.Command("echo", "stdout")
 | 
			
		||||
	out, err := cmd.CombinedOutput()
 | 
			
		||||
	if err != nil {
 | 
			
		||||
		t.Errorf("expected success, got %+v", err)
 | 
			
		||||
	}
 | 
			
		||||
	if string(out) != "stdout\n" {
 | 
			
		||||
		t.Errorf("unexpected output: %q", string(out))
 | 
			
		||||
	}
 | 
			
		||||
 | 
			
		||||
	cmd = ex.Command("/bin/sh", "-c", "echo stderr > /dev/stderr")
 | 
			
		||||
	out, err = cmd.CombinedOutput()
 | 
			
		||||
	if err != nil {
 | 
			
		||||
		t.Errorf("expected success, got %+v", err)
 | 
			
		||||
	}
 | 
			
		||||
	if string(out) != "stderr\n" {
 | 
			
		||||
		t.Errorf("unexpected output: %q", string(out))
 | 
			
		||||
	}
 | 
			
		||||
}
 | 
			
		||||
 | 
			
		||||
func TestLookPath(t *testing.T) {
 | 
			
		||||
	ex := New()
 | 
			
		||||
 | 
			
		||||
	shExpected, _ := osexec.LookPath("sh")
 | 
			
		||||
	sh, _ := ex.LookPath("sh")
 | 
			
		||||
	if sh != shExpected {
 | 
			
		||||
		t.Errorf("unexpected result for LookPath: got %s, expected %s", sh, shExpected)
 | 
			
		||||
	}
 | 
			
		||||
}
 | 
			
		||||
 | 
			
		||||
func TestExecutableNotFound(t *testing.T) {
 | 
			
		||||
	exec := New()
 | 
			
		||||
	cmd := exec.Command("fake_executable_name")
 | 
			
		||||
	_, err := cmd.CombinedOutput()
 | 
			
		||||
	if err != ErrExecutableNotFound {
 | 
			
		||||
		t.Errorf("Expected error ErrExecutableNotFound but got %v", err)
 | 
			
		||||
	}
 | 
			
		||||
}
 | 
			
		||||
@@ -16,8 +16,8 @@ go_library(
 | 
			
		||||
    ],
 | 
			
		||||
    tags = ["automanaged"],
 | 
			
		||||
    deps = [
 | 
			
		||||
        "//pkg/util/exec:go_default_library",
 | 
			
		||||
        "//vendor/github.com/golang/glog:go_default_library",
 | 
			
		||||
        "//vendor/k8s.io/utils/exec:go_default_library",
 | 
			
		||||
    ],
 | 
			
		||||
)
 | 
			
		||||
 | 
			
		||||
@@ -26,7 +26,7 @@ go_test(
 | 
			
		||||
    srcs = ["ipconfig_test.go"],
 | 
			
		||||
    library = ":go_default_library",
 | 
			
		||||
    tags = ["automanaged"],
 | 
			
		||||
    deps = ["//pkg/util/exec:go_default_library"],
 | 
			
		||||
    deps = ["//vendor/k8s.io/utils/exec:go_default_library"],
 | 
			
		||||
)
 | 
			
		||||
 | 
			
		||||
filegroup(
 | 
			
		||||
 
 | 
			
		||||
@@ -23,7 +23,7 @@ import (
 | 
			
		||||
 | 
			
		||||
	"github.com/golang/glog"
 | 
			
		||||
 | 
			
		||||
	utilexec "k8s.io/kubernetes/pkg/util/exec"
 | 
			
		||||
	utilexec "k8s.io/utils/exec"
 | 
			
		||||
)
 | 
			
		||||
 | 
			
		||||
// Interface is an injectable interface for running ipconfig commands.  Implementations must be goroutine-safe.
 | 
			
		||||
 
 | 
			
		||||
@@ -19,7 +19,7 @@ package ipconfig
 | 
			
		||||
import (
 | 
			
		||||
	"testing"
 | 
			
		||||
 | 
			
		||||
	"k8s.io/kubernetes/pkg/util/exec"
 | 
			
		||||
	"k8s.io/utils/exec"
 | 
			
		||||
)
 | 
			
		||||
 | 
			
		||||
func TestGetDnsSuffixSearchList(t *testing.T) {
 | 
			
		||||
 
 | 
			
		||||
@@ -19,7 +19,6 @@ go_library(
 | 
			
		||||
    tags = ["automanaged"],
 | 
			
		||||
    deps = [
 | 
			
		||||
        "//pkg/util/dbus:go_default_library",
 | 
			
		||||
        "//pkg/util/exec:go_default_library",
 | 
			
		||||
        "//pkg/util/version:go_default_library",
 | 
			
		||||
        "//vendor/github.com/godbus/dbus:go_default_library",
 | 
			
		||||
        "//vendor/github.com/golang/glog:go_default_library",
 | 
			
		||||
@@ -27,6 +26,7 @@ go_library(
 | 
			
		||||
        "//vendor/k8s.io/apimachinery/pkg/util/errors:go_default_library",
 | 
			
		||||
        "//vendor/k8s.io/apimachinery/pkg/util/sets:go_default_library",
 | 
			
		||||
        "//vendor/k8s.io/apimachinery/pkg/util/wait:go_default_library",
 | 
			
		||||
        "//vendor/k8s.io/utils/exec:go_default_library",
 | 
			
		||||
    ],
 | 
			
		||||
)
 | 
			
		||||
 | 
			
		||||
@@ -37,8 +37,9 @@ go_test(
 | 
			
		||||
    tags = ["automanaged"],
 | 
			
		||||
    deps = [
 | 
			
		||||
        "//pkg/util/dbus:go_default_library",
 | 
			
		||||
        "//pkg/util/exec:go_default_library",
 | 
			
		||||
        "//vendor/k8s.io/apimachinery/pkg/util/sets:go_default_library",
 | 
			
		||||
        "//vendor/k8s.io/utils/exec:go_default_library",
 | 
			
		||||
        "//vendor/k8s.io/utils/exec/testing:go_default_library",
 | 
			
		||||
    ],
 | 
			
		||||
)
 | 
			
		||||
 | 
			
		||||
 
 | 
			
		||||
@@ -27,8 +27,8 @@ import (
 | 
			
		||||
	"github.com/golang/glog"
 | 
			
		||||
	"k8s.io/apimachinery/pkg/util/sets"
 | 
			
		||||
	utildbus "k8s.io/kubernetes/pkg/util/dbus"
 | 
			
		||||
	utilexec "k8s.io/kubernetes/pkg/util/exec"
 | 
			
		||||
	utilversion "k8s.io/kubernetes/pkg/util/version"
 | 
			
		||||
	utilexec "k8s.io/utils/exec"
 | 
			
		||||
)
 | 
			
		||||
 | 
			
		||||
type RulePosition string
 | 
			
		||||
 
 | 
			
		||||
@@ -26,7 +26,8 @@ import (
 | 
			
		||||
 | 
			
		||||
	"k8s.io/apimachinery/pkg/util/sets"
 | 
			
		||||
	"k8s.io/kubernetes/pkg/util/dbus"
 | 
			
		||||
	"k8s.io/kubernetes/pkg/util/exec"
 | 
			
		||||
	"k8s.io/utils/exec"
 | 
			
		||||
	fakeexec "k8s.io/utils/exec/testing"
 | 
			
		||||
)
 | 
			
		||||
 | 
			
		||||
const TestLockfilePath = "xtables.lock"
 | 
			
		||||
@@ -42,8 +43,8 @@ func getIPTablesCommand(protocol Protocol) string {
 | 
			
		||||
}
 | 
			
		||||
 | 
			
		||||
func testEnsureChain(t *testing.T, protocol Protocol) {
 | 
			
		||||
	fcmd := exec.FakeCmd{
 | 
			
		||||
		CombinedOutputScript: []exec.FakeCombinedOutputAction{
 | 
			
		||||
	fcmd := fakeexec.FakeCmd{
 | 
			
		||||
		CombinedOutputScript: []fakeexec.FakeCombinedOutputAction{
 | 
			
		||||
			// iptables version check
 | 
			
		||||
			func() ([]byte, error) { return []byte("iptables v1.9.22"), nil },
 | 
			
		||||
			// iptables-restore version check
 | 
			
		||||
@@ -51,18 +52,18 @@ func testEnsureChain(t *testing.T, protocol Protocol) {
 | 
			
		||||
			// Success.
 | 
			
		||||
			func() ([]byte, error) { return []byte{}, nil },
 | 
			
		||||
			// Exists.
 | 
			
		||||
			func() ([]byte, error) { return nil, &exec.FakeExitError{Status: 1} },
 | 
			
		||||
			func() ([]byte, error) { return nil, &fakeexec.FakeExitError{Status: 1} },
 | 
			
		||||
			// Failure.
 | 
			
		||||
			func() ([]byte, error) { return nil, &exec.FakeExitError{Status: 2} },
 | 
			
		||||
			func() ([]byte, error) { return nil, &fakeexec.FakeExitError{Status: 2} },
 | 
			
		||||
		},
 | 
			
		||||
	}
 | 
			
		||||
	fexec := exec.FakeExec{
 | 
			
		||||
		CommandScript: []exec.FakeCommandAction{
 | 
			
		||||
			func(cmd string, args ...string) exec.Cmd { return exec.InitFakeCmd(&fcmd, cmd, args...) },
 | 
			
		||||
			func(cmd string, args ...string) exec.Cmd { return exec.InitFakeCmd(&fcmd, cmd, args...) },
 | 
			
		||||
			func(cmd string, args ...string) exec.Cmd { return exec.InitFakeCmd(&fcmd, cmd, args...) },
 | 
			
		||||
			func(cmd string, args ...string) exec.Cmd { return exec.InitFakeCmd(&fcmd, cmd, args...) },
 | 
			
		||||
			func(cmd string, args ...string) exec.Cmd { return exec.InitFakeCmd(&fcmd, cmd, args...) },
 | 
			
		||||
	fexec := fakeexec.FakeExec{
 | 
			
		||||
		CommandScript: []fakeexec.FakeCommandAction{
 | 
			
		||||
			func(cmd string, args ...string) exec.Cmd { return fakeexec.InitFakeCmd(&fcmd, cmd, args...) },
 | 
			
		||||
			func(cmd string, args ...string) exec.Cmd { return fakeexec.InitFakeCmd(&fcmd, cmd, args...) },
 | 
			
		||||
			func(cmd string, args ...string) exec.Cmd { return fakeexec.InitFakeCmd(&fcmd, cmd, args...) },
 | 
			
		||||
			func(cmd string, args ...string) exec.Cmd { return fakeexec.InitFakeCmd(&fcmd, cmd, args...) },
 | 
			
		||||
			func(cmd string, args ...string) exec.Cmd { return fakeexec.InitFakeCmd(&fcmd, cmd, args...) },
 | 
			
		||||
		},
 | 
			
		||||
	}
 | 
			
		||||
	runner := New(&fexec, dbus.NewFake(nil, nil), protocol)
 | 
			
		||||
@@ -106,8 +107,8 @@ func TestEnsureChainIpv6(t *testing.T) {
 | 
			
		||||
}
 | 
			
		||||
 | 
			
		||||
func TestFlushChain(t *testing.T) {
 | 
			
		||||
	fcmd := exec.FakeCmd{
 | 
			
		||||
		CombinedOutputScript: []exec.FakeCombinedOutputAction{
 | 
			
		||||
	fcmd := fakeexec.FakeCmd{
 | 
			
		||||
		CombinedOutputScript: []fakeexec.FakeCombinedOutputAction{
 | 
			
		||||
			// iptables version check
 | 
			
		||||
			func() ([]byte, error) { return []byte("iptables v1.9.22"), nil },
 | 
			
		||||
			// iptables-restore version check
 | 
			
		||||
@@ -115,15 +116,15 @@ func TestFlushChain(t *testing.T) {
 | 
			
		||||
			// Success.
 | 
			
		||||
			func() ([]byte, error) { return []byte{}, nil },
 | 
			
		||||
			// Failure.
 | 
			
		||||
			func() ([]byte, error) { return nil, &exec.FakeExitError{Status: 1} },
 | 
			
		||||
			func() ([]byte, error) { return nil, &fakeexec.FakeExitError{Status: 1} },
 | 
			
		||||
		},
 | 
			
		||||
	}
 | 
			
		||||
	fexec := exec.FakeExec{
 | 
			
		||||
		CommandScript: []exec.FakeCommandAction{
 | 
			
		||||
			func(cmd string, args ...string) exec.Cmd { return exec.InitFakeCmd(&fcmd, cmd, args...) },
 | 
			
		||||
			func(cmd string, args ...string) exec.Cmd { return exec.InitFakeCmd(&fcmd, cmd, args...) },
 | 
			
		||||
			func(cmd string, args ...string) exec.Cmd { return exec.InitFakeCmd(&fcmd, cmd, args...) },
 | 
			
		||||
			func(cmd string, args ...string) exec.Cmd { return exec.InitFakeCmd(&fcmd, cmd, args...) },
 | 
			
		||||
	fexec := fakeexec.FakeExec{
 | 
			
		||||
		CommandScript: []fakeexec.FakeCommandAction{
 | 
			
		||||
			func(cmd string, args ...string) exec.Cmd { return fakeexec.InitFakeCmd(&fcmd, cmd, args...) },
 | 
			
		||||
			func(cmd string, args ...string) exec.Cmd { return fakeexec.InitFakeCmd(&fcmd, cmd, args...) },
 | 
			
		||||
			func(cmd string, args ...string) exec.Cmd { return fakeexec.InitFakeCmd(&fcmd, cmd, args...) },
 | 
			
		||||
			func(cmd string, args ...string) exec.Cmd { return fakeexec.InitFakeCmd(&fcmd, cmd, args...) },
 | 
			
		||||
		},
 | 
			
		||||
	}
 | 
			
		||||
	runner := New(&fexec, dbus.NewFake(nil, nil), ProtocolIpv4)
 | 
			
		||||
@@ -147,8 +148,8 @@ func TestFlushChain(t *testing.T) {
 | 
			
		||||
}
 | 
			
		||||
 | 
			
		||||
func TestDeleteChain(t *testing.T) {
 | 
			
		||||
	fcmd := exec.FakeCmd{
 | 
			
		||||
		CombinedOutputScript: []exec.FakeCombinedOutputAction{
 | 
			
		||||
	fcmd := fakeexec.FakeCmd{
 | 
			
		||||
		CombinedOutputScript: []fakeexec.FakeCombinedOutputAction{
 | 
			
		||||
			// iptables version check
 | 
			
		||||
			func() ([]byte, error) { return []byte("iptables v1.9.22"), nil },
 | 
			
		||||
			// iptables-restore version check
 | 
			
		||||
@@ -156,15 +157,15 @@ func TestDeleteChain(t *testing.T) {
 | 
			
		||||
			// Success.
 | 
			
		||||
			func() ([]byte, error) { return []byte{}, nil },
 | 
			
		||||
			// Failure.
 | 
			
		||||
			func() ([]byte, error) { return nil, &exec.FakeExitError{Status: 1} },
 | 
			
		||||
			func() ([]byte, error) { return nil, &fakeexec.FakeExitError{Status: 1} },
 | 
			
		||||
		},
 | 
			
		||||
	}
 | 
			
		||||
	fexec := exec.FakeExec{
 | 
			
		||||
		CommandScript: []exec.FakeCommandAction{
 | 
			
		||||
			func(cmd string, args ...string) exec.Cmd { return exec.InitFakeCmd(&fcmd, cmd, args...) },
 | 
			
		||||
			func(cmd string, args ...string) exec.Cmd { return exec.InitFakeCmd(&fcmd, cmd, args...) },
 | 
			
		||||
			func(cmd string, args ...string) exec.Cmd { return exec.InitFakeCmd(&fcmd, cmd, args...) },
 | 
			
		||||
			func(cmd string, args ...string) exec.Cmd { return exec.InitFakeCmd(&fcmd, cmd, args...) },
 | 
			
		||||
	fexec := fakeexec.FakeExec{
 | 
			
		||||
		CommandScript: []fakeexec.FakeCommandAction{
 | 
			
		||||
			func(cmd string, args ...string) exec.Cmd { return fakeexec.InitFakeCmd(&fcmd, cmd, args...) },
 | 
			
		||||
			func(cmd string, args ...string) exec.Cmd { return fakeexec.InitFakeCmd(&fcmd, cmd, args...) },
 | 
			
		||||
			func(cmd string, args ...string) exec.Cmd { return fakeexec.InitFakeCmd(&fcmd, cmd, args...) },
 | 
			
		||||
			func(cmd string, args ...string) exec.Cmd { return fakeexec.InitFakeCmd(&fcmd, cmd, args...) },
 | 
			
		||||
		},
 | 
			
		||||
	}
 | 
			
		||||
	runner := New(&fexec, dbus.NewFake(nil, nil), ProtocolIpv4)
 | 
			
		||||
@@ -188,8 +189,8 @@ func TestDeleteChain(t *testing.T) {
 | 
			
		||||
}
 | 
			
		||||
 | 
			
		||||
func TestEnsureRuleAlreadyExists(t *testing.T) {
 | 
			
		||||
	fcmd := exec.FakeCmd{
 | 
			
		||||
		CombinedOutputScript: []exec.FakeCombinedOutputAction{
 | 
			
		||||
	fcmd := fakeexec.FakeCmd{
 | 
			
		||||
		CombinedOutputScript: []fakeexec.FakeCombinedOutputAction{
 | 
			
		||||
			// iptables version check
 | 
			
		||||
			func() ([]byte, error) { return []byte("iptables v1.9.22"), nil },
 | 
			
		||||
			// iptables-restore version check
 | 
			
		||||
@@ -198,14 +199,14 @@ func TestEnsureRuleAlreadyExists(t *testing.T) {
 | 
			
		||||
			func() ([]byte, error) { return []byte{}, nil },
 | 
			
		||||
		},
 | 
			
		||||
	}
 | 
			
		||||
	fexec := exec.FakeExec{
 | 
			
		||||
		CommandScript: []exec.FakeCommandAction{
 | 
			
		||||
	fexec := fakeexec.FakeExec{
 | 
			
		||||
		CommandScript: []fakeexec.FakeCommandAction{
 | 
			
		||||
			// iptables version check
 | 
			
		||||
			func(cmd string, args ...string) exec.Cmd { return exec.InitFakeCmd(&fcmd, cmd, args...) },
 | 
			
		||||
			func(cmd string, args ...string) exec.Cmd { return fakeexec.InitFakeCmd(&fcmd, cmd, args...) },
 | 
			
		||||
			// iptables-restore version check
 | 
			
		||||
			func(cmd string, args ...string) exec.Cmd { return exec.InitFakeCmd(&fcmd, cmd, args...) },
 | 
			
		||||
			func(cmd string, args ...string) exec.Cmd { return fakeexec.InitFakeCmd(&fcmd, cmd, args...) },
 | 
			
		||||
			// The second Command() call is checking the rule.  Success of that exec means "done".
 | 
			
		||||
			func(cmd string, args ...string) exec.Cmd { return exec.InitFakeCmd(&fcmd, cmd, args...) },
 | 
			
		||||
			func(cmd string, args ...string) exec.Cmd { return fakeexec.InitFakeCmd(&fcmd, cmd, args...) },
 | 
			
		||||
		},
 | 
			
		||||
	}
 | 
			
		||||
	runner := New(&fexec, dbus.NewFake(nil, nil), ProtocolIpv4)
 | 
			
		||||
@@ -226,27 +227,27 @@ func TestEnsureRuleAlreadyExists(t *testing.T) {
 | 
			
		||||
}
 | 
			
		||||
 | 
			
		||||
func TestEnsureRuleNew(t *testing.T) {
 | 
			
		||||
	fcmd := exec.FakeCmd{
 | 
			
		||||
		CombinedOutputScript: []exec.FakeCombinedOutputAction{
 | 
			
		||||
	fcmd := fakeexec.FakeCmd{
 | 
			
		||||
		CombinedOutputScript: []fakeexec.FakeCombinedOutputAction{
 | 
			
		||||
			// iptables version check
 | 
			
		||||
			func() ([]byte, error) { return []byte("iptables v1.9.22"), nil },
 | 
			
		||||
			// iptables-restore version check
 | 
			
		||||
			func() ([]byte, error) { return []byte("iptables-restore v1.9.22"), nil },
 | 
			
		||||
			// Status 1 on the first call.
 | 
			
		||||
			func() ([]byte, error) { return nil, &exec.FakeExitError{Status: 1} },
 | 
			
		||||
			func() ([]byte, error) { return nil, &fakeexec.FakeExitError{Status: 1} },
 | 
			
		||||
			// Success on the second call.
 | 
			
		||||
			func() ([]byte, error) { return []byte{}, nil },
 | 
			
		||||
		},
 | 
			
		||||
	}
 | 
			
		||||
	fexec := exec.FakeExec{
 | 
			
		||||
		CommandScript: []exec.FakeCommandAction{
 | 
			
		||||
	fexec := fakeexec.FakeExec{
 | 
			
		||||
		CommandScript: []fakeexec.FakeCommandAction{
 | 
			
		||||
			// iptables version check
 | 
			
		||||
			func(cmd string, args ...string) exec.Cmd { return exec.InitFakeCmd(&fcmd, cmd, args...) },
 | 
			
		||||
			func(cmd string, args ...string) exec.Cmd { return fakeexec.InitFakeCmd(&fcmd, cmd, args...) },
 | 
			
		||||
			// iptables-restore version check
 | 
			
		||||
			func(cmd string, args ...string) exec.Cmd { return exec.InitFakeCmd(&fcmd, cmd, args...) },
 | 
			
		||||
			func(cmd string, args ...string) exec.Cmd { return fakeexec.InitFakeCmd(&fcmd, cmd, args...) },
 | 
			
		||||
			// The second Command() call is checking the rule.  Failure of that means create it.
 | 
			
		||||
			func(cmd string, args ...string) exec.Cmd { return exec.InitFakeCmd(&fcmd, cmd, args...) },
 | 
			
		||||
			func(cmd string, args ...string) exec.Cmd { return exec.InitFakeCmd(&fcmd, cmd, args...) },
 | 
			
		||||
			func(cmd string, args ...string) exec.Cmd { return fakeexec.InitFakeCmd(&fcmd, cmd, args...) },
 | 
			
		||||
			func(cmd string, args ...string) exec.Cmd { return fakeexec.InitFakeCmd(&fcmd, cmd, args...) },
 | 
			
		||||
		},
 | 
			
		||||
	}
 | 
			
		||||
	runner := New(&fexec, dbus.NewFake(nil, nil), ProtocolIpv4)
 | 
			
		||||
@@ -267,24 +268,24 @@ func TestEnsureRuleNew(t *testing.T) {
 | 
			
		||||
}
 | 
			
		||||
 | 
			
		||||
func TestEnsureRuleErrorChecking(t *testing.T) {
 | 
			
		||||
	fcmd := exec.FakeCmd{
 | 
			
		||||
		CombinedOutputScript: []exec.FakeCombinedOutputAction{
 | 
			
		||||
	fcmd := fakeexec.FakeCmd{
 | 
			
		||||
		CombinedOutputScript: []fakeexec.FakeCombinedOutputAction{
 | 
			
		||||
			// iptables version check
 | 
			
		||||
			func() ([]byte, error) { return []byte("iptables v1.9.22"), nil },
 | 
			
		||||
			// iptables-restore version check
 | 
			
		||||
			func() ([]byte, error) { return []byte("iptables-restore v1.9.22"), nil },
 | 
			
		||||
			// Status 2 on the first call.
 | 
			
		||||
			func() ([]byte, error) { return nil, &exec.FakeExitError{Status: 2} },
 | 
			
		||||
			func() ([]byte, error) { return nil, &fakeexec.FakeExitError{Status: 2} },
 | 
			
		||||
		},
 | 
			
		||||
	}
 | 
			
		||||
	fexec := exec.FakeExec{
 | 
			
		||||
		CommandScript: []exec.FakeCommandAction{
 | 
			
		||||
	fexec := fakeexec.FakeExec{
 | 
			
		||||
		CommandScript: []fakeexec.FakeCommandAction{
 | 
			
		||||
			// iptables version check
 | 
			
		||||
			func(cmd string, args ...string) exec.Cmd { return exec.InitFakeCmd(&fcmd, cmd, args...) },
 | 
			
		||||
			func(cmd string, args ...string) exec.Cmd { return fakeexec.InitFakeCmd(&fcmd, cmd, args...) },
 | 
			
		||||
			// iptables-restore version check
 | 
			
		||||
			func(cmd string, args ...string) exec.Cmd { return exec.InitFakeCmd(&fcmd, cmd, args...) },
 | 
			
		||||
			func(cmd string, args ...string) exec.Cmd { return fakeexec.InitFakeCmd(&fcmd, cmd, args...) },
 | 
			
		||||
			// The second Command() call is checking the rule.  Failure of that means create it.
 | 
			
		||||
			func(cmd string, args ...string) exec.Cmd { return exec.InitFakeCmd(&fcmd, cmd, args...) },
 | 
			
		||||
			func(cmd string, args ...string) exec.Cmd { return fakeexec.InitFakeCmd(&fcmd, cmd, args...) },
 | 
			
		||||
		},
 | 
			
		||||
	}
 | 
			
		||||
	runner := New(&fexec, dbus.NewFake(nil, nil), ProtocolIpv4)
 | 
			
		||||
@@ -299,27 +300,27 @@ func TestEnsureRuleErrorChecking(t *testing.T) {
 | 
			
		||||
}
 | 
			
		||||
 | 
			
		||||
func TestEnsureRuleErrorCreating(t *testing.T) {
 | 
			
		||||
	fcmd := exec.FakeCmd{
 | 
			
		||||
		CombinedOutputScript: []exec.FakeCombinedOutputAction{
 | 
			
		||||
	fcmd := fakeexec.FakeCmd{
 | 
			
		||||
		CombinedOutputScript: []fakeexec.FakeCombinedOutputAction{
 | 
			
		||||
			// iptables version check
 | 
			
		||||
			func() ([]byte, error) { return []byte("iptables v1.9.22"), nil },
 | 
			
		||||
			// iptables-restore version check
 | 
			
		||||
			func() ([]byte, error) { return []byte("iptables-restore v1.9.22"), nil },
 | 
			
		||||
			// Status 1 on the first call.
 | 
			
		||||
			func() ([]byte, error) { return nil, &exec.FakeExitError{Status: 1} },
 | 
			
		||||
			func() ([]byte, error) { return nil, &fakeexec.FakeExitError{Status: 1} },
 | 
			
		||||
			// Status 1 on the second call.
 | 
			
		||||
			func() ([]byte, error) { return nil, &exec.FakeExitError{Status: 1} },
 | 
			
		||||
			func() ([]byte, error) { return nil, &fakeexec.FakeExitError{Status: 1} },
 | 
			
		||||
		},
 | 
			
		||||
	}
 | 
			
		||||
	fexec := exec.FakeExec{
 | 
			
		||||
		CommandScript: []exec.FakeCommandAction{
 | 
			
		||||
	fexec := fakeexec.FakeExec{
 | 
			
		||||
		CommandScript: []fakeexec.FakeCommandAction{
 | 
			
		||||
			// iptables version check
 | 
			
		||||
			func(cmd string, args ...string) exec.Cmd { return exec.InitFakeCmd(&fcmd, cmd, args...) },
 | 
			
		||||
			func(cmd string, args ...string) exec.Cmd { return fakeexec.InitFakeCmd(&fcmd, cmd, args...) },
 | 
			
		||||
			// iptables-restore version check
 | 
			
		||||
			func(cmd string, args ...string) exec.Cmd { return exec.InitFakeCmd(&fcmd, cmd, args...) },
 | 
			
		||||
			func(cmd string, args ...string) exec.Cmd { return fakeexec.InitFakeCmd(&fcmd, cmd, args...) },
 | 
			
		||||
			// The second Command() call is checking the rule.  Failure of that means create it.
 | 
			
		||||
			func(cmd string, args ...string) exec.Cmd { return exec.InitFakeCmd(&fcmd, cmd, args...) },
 | 
			
		||||
			func(cmd string, args ...string) exec.Cmd { return exec.InitFakeCmd(&fcmd, cmd, args...) },
 | 
			
		||||
			func(cmd string, args ...string) exec.Cmd { return fakeexec.InitFakeCmd(&fcmd, cmd, args...) },
 | 
			
		||||
			func(cmd string, args ...string) exec.Cmd { return fakeexec.InitFakeCmd(&fcmd, cmd, args...) },
 | 
			
		||||
		},
 | 
			
		||||
	}
 | 
			
		||||
	runner := New(&fexec, dbus.NewFake(nil, nil), ProtocolIpv4)
 | 
			
		||||
@@ -334,24 +335,24 @@ func TestEnsureRuleErrorCreating(t *testing.T) {
 | 
			
		||||
}
 | 
			
		||||
 | 
			
		||||
func TestDeleteRuleDoesNotExist(t *testing.T) {
 | 
			
		||||
	fcmd := exec.FakeCmd{
 | 
			
		||||
		CombinedOutputScript: []exec.FakeCombinedOutputAction{
 | 
			
		||||
	fcmd := fakeexec.FakeCmd{
 | 
			
		||||
		CombinedOutputScript: []fakeexec.FakeCombinedOutputAction{
 | 
			
		||||
			// iptables version check
 | 
			
		||||
			func() ([]byte, error) { return []byte("iptables v1.9.22"), nil },
 | 
			
		||||
			// iptables-restore version check
 | 
			
		||||
			func() ([]byte, error) { return []byte("iptables-restore v1.9.22"), nil },
 | 
			
		||||
			// Status 1 on the first call.
 | 
			
		||||
			func() ([]byte, error) { return nil, &exec.FakeExitError{Status: 1} },
 | 
			
		||||
			func() ([]byte, error) { return nil, &fakeexec.FakeExitError{Status: 1} },
 | 
			
		||||
		},
 | 
			
		||||
	}
 | 
			
		||||
	fexec := exec.FakeExec{
 | 
			
		||||
		CommandScript: []exec.FakeCommandAction{
 | 
			
		||||
	fexec := fakeexec.FakeExec{
 | 
			
		||||
		CommandScript: []fakeexec.FakeCommandAction{
 | 
			
		||||
			// iptables version check
 | 
			
		||||
			func(cmd string, args ...string) exec.Cmd { return exec.InitFakeCmd(&fcmd, cmd, args...) },
 | 
			
		||||
			func(cmd string, args ...string) exec.Cmd { return fakeexec.InitFakeCmd(&fcmd, cmd, args...) },
 | 
			
		||||
			// iptables-restore version check
 | 
			
		||||
			func(cmd string, args ...string) exec.Cmd { return exec.InitFakeCmd(&fcmd, cmd, args...) },
 | 
			
		||||
			func(cmd string, args ...string) exec.Cmd { return fakeexec.InitFakeCmd(&fcmd, cmd, args...) },
 | 
			
		||||
			// The second Command() call is checking the rule.  Failure of that exec means "does not exist".
 | 
			
		||||
			func(cmd string, args ...string) exec.Cmd { return exec.InitFakeCmd(&fcmd, cmd, args...) },
 | 
			
		||||
			func(cmd string, args ...string) exec.Cmd { return fakeexec.InitFakeCmd(&fcmd, cmd, args...) },
 | 
			
		||||
		},
 | 
			
		||||
	}
 | 
			
		||||
	runner := New(&fexec, dbus.NewFake(nil, nil), ProtocolIpv4)
 | 
			
		||||
@@ -369,8 +370,8 @@ func TestDeleteRuleDoesNotExist(t *testing.T) {
 | 
			
		||||
}
 | 
			
		||||
 | 
			
		||||
func TestDeleteRuleExists(t *testing.T) {
 | 
			
		||||
	fcmd := exec.FakeCmd{
 | 
			
		||||
		CombinedOutputScript: []exec.FakeCombinedOutputAction{
 | 
			
		||||
	fcmd := fakeexec.FakeCmd{
 | 
			
		||||
		CombinedOutputScript: []fakeexec.FakeCombinedOutputAction{
 | 
			
		||||
			// iptables version check
 | 
			
		||||
			func() ([]byte, error) { return []byte("iptables v1.9.22"), nil },
 | 
			
		||||
			// iptables-restore version check
 | 
			
		||||
@@ -381,15 +382,15 @@ func TestDeleteRuleExists(t *testing.T) {
 | 
			
		||||
			func() ([]byte, error) { return []byte{}, nil },
 | 
			
		||||
		},
 | 
			
		||||
	}
 | 
			
		||||
	fexec := exec.FakeExec{
 | 
			
		||||
		CommandScript: []exec.FakeCommandAction{
 | 
			
		||||
	fexec := fakeexec.FakeExec{
 | 
			
		||||
		CommandScript: []fakeexec.FakeCommandAction{
 | 
			
		||||
			// iptables version check
 | 
			
		||||
			func(cmd string, args ...string) exec.Cmd { return exec.InitFakeCmd(&fcmd, cmd, args...) },
 | 
			
		||||
			func(cmd string, args ...string) exec.Cmd { return fakeexec.InitFakeCmd(&fcmd, cmd, args...) },
 | 
			
		||||
			// iptables-restore version check
 | 
			
		||||
			func(cmd string, args ...string) exec.Cmd { return exec.InitFakeCmd(&fcmd, cmd, args...) },
 | 
			
		||||
			func(cmd string, args ...string) exec.Cmd { return fakeexec.InitFakeCmd(&fcmd, cmd, args...) },
 | 
			
		||||
			// The second Command() call is checking the rule.  Success of that means delete it.
 | 
			
		||||
			func(cmd string, args ...string) exec.Cmd { return exec.InitFakeCmd(&fcmd, cmd, args...) },
 | 
			
		||||
			func(cmd string, args ...string) exec.Cmd { return exec.InitFakeCmd(&fcmd, cmd, args...) },
 | 
			
		||||
			func(cmd string, args ...string) exec.Cmd { return fakeexec.InitFakeCmd(&fcmd, cmd, args...) },
 | 
			
		||||
			func(cmd string, args ...string) exec.Cmd { return fakeexec.InitFakeCmd(&fcmd, cmd, args...) },
 | 
			
		||||
		},
 | 
			
		||||
	}
 | 
			
		||||
	runner := New(&fexec, dbus.NewFake(nil, nil), ProtocolIpv4)
 | 
			
		||||
@@ -407,24 +408,24 @@ func TestDeleteRuleExists(t *testing.T) {
 | 
			
		||||
}
 | 
			
		||||
 | 
			
		||||
func TestDeleteRuleErrorChecking(t *testing.T) {
 | 
			
		||||
	fcmd := exec.FakeCmd{
 | 
			
		||||
		CombinedOutputScript: []exec.FakeCombinedOutputAction{
 | 
			
		||||
	fcmd := fakeexec.FakeCmd{
 | 
			
		||||
		CombinedOutputScript: []fakeexec.FakeCombinedOutputAction{
 | 
			
		||||
			// iptables version check
 | 
			
		||||
			func() ([]byte, error) { return []byte("iptables v1.9.22"), nil },
 | 
			
		||||
			// iptables-restore version check
 | 
			
		||||
			func() ([]byte, error) { return []byte("iptables-restore v1.9.22"), nil },
 | 
			
		||||
			// Status 2 on the first call.
 | 
			
		||||
			func() ([]byte, error) { return nil, &exec.FakeExitError{Status: 2} },
 | 
			
		||||
			func() ([]byte, error) { return nil, &fakeexec.FakeExitError{Status: 2} },
 | 
			
		||||
		},
 | 
			
		||||
	}
 | 
			
		||||
	fexec := exec.FakeExec{
 | 
			
		||||
		CommandScript: []exec.FakeCommandAction{
 | 
			
		||||
	fexec := fakeexec.FakeExec{
 | 
			
		||||
		CommandScript: []fakeexec.FakeCommandAction{
 | 
			
		||||
			// iptables version check
 | 
			
		||||
			func(cmd string, args ...string) exec.Cmd { return exec.InitFakeCmd(&fcmd, cmd, args...) },
 | 
			
		||||
			func(cmd string, args ...string) exec.Cmd { return fakeexec.InitFakeCmd(&fcmd, cmd, args...) },
 | 
			
		||||
			// iptables-restore version check
 | 
			
		||||
			func(cmd string, args ...string) exec.Cmd { return exec.InitFakeCmd(&fcmd, cmd, args...) },
 | 
			
		||||
			func(cmd string, args ...string) exec.Cmd { return fakeexec.InitFakeCmd(&fcmd, cmd, args...) },
 | 
			
		||||
			// The second Command() call is checking the rule.  Failure of that means create it.
 | 
			
		||||
			func(cmd string, args ...string) exec.Cmd { return exec.InitFakeCmd(&fcmd, cmd, args...) },
 | 
			
		||||
			func(cmd string, args ...string) exec.Cmd { return fakeexec.InitFakeCmd(&fcmd, cmd, args...) },
 | 
			
		||||
		},
 | 
			
		||||
	}
 | 
			
		||||
	runner := New(&fexec, dbus.NewFake(nil, nil), ProtocolIpv4)
 | 
			
		||||
@@ -439,8 +440,8 @@ func TestDeleteRuleErrorChecking(t *testing.T) {
 | 
			
		||||
}
 | 
			
		||||
 | 
			
		||||
func TestDeleteRuleErrorDeleting(t *testing.T) {
 | 
			
		||||
	fcmd := exec.FakeCmd{
 | 
			
		||||
		CombinedOutputScript: []exec.FakeCombinedOutputAction{
 | 
			
		||||
	fcmd := fakeexec.FakeCmd{
 | 
			
		||||
		CombinedOutputScript: []fakeexec.FakeCombinedOutputAction{
 | 
			
		||||
			// iptables version check
 | 
			
		||||
			func() ([]byte, error) { return []byte("iptables v1.9.22"), nil },
 | 
			
		||||
			// iptables-restore version check
 | 
			
		||||
@@ -448,18 +449,18 @@ func TestDeleteRuleErrorDeleting(t *testing.T) {
 | 
			
		||||
			// Success on the first call.
 | 
			
		||||
			func() ([]byte, error) { return []byte{}, nil },
 | 
			
		||||
			// Status 1 on the second call.
 | 
			
		||||
			func() ([]byte, error) { return nil, &exec.FakeExitError{Status: 1} },
 | 
			
		||||
			func() ([]byte, error) { return nil, &fakeexec.FakeExitError{Status: 1} },
 | 
			
		||||
		},
 | 
			
		||||
	}
 | 
			
		||||
	fexec := exec.FakeExec{
 | 
			
		||||
		CommandScript: []exec.FakeCommandAction{
 | 
			
		||||
	fexec := fakeexec.FakeExec{
 | 
			
		||||
		CommandScript: []fakeexec.FakeCommandAction{
 | 
			
		||||
			// iptables version check
 | 
			
		||||
			func(cmd string, args ...string) exec.Cmd { return exec.InitFakeCmd(&fcmd, cmd, args...) },
 | 
			
		||||
			func(cmd string, args ...string) exec.Cmd { return fakeexec.InitFakeCmd(&fcmd, cmd, args...) },
 | 
			
		||||
			// iptables-restore version check
 | 
			
		||||
			func(cmd string, args ...string) exec.Cmd { return exec.InitFakeCmd(&fcmd, cmd, args...) },
 | 
			
		||||
			func(cmd string, args ...string) exec.Cmd { return fakeexec.InitFakeCmd(&fcmd, cmd, args...) },
 | 
			
		||||
			// The second Command() call is checking the rule.  Success of that means delete it.
 | 
			
		||||
			func(cmd string, args ...string) exec.Cmd { return exec.InitFakeCmd(&fcmd, cmd, args...) },
 | 
			
		||||
			func(cmd string, args ...string) exec.Cmd { return exec.InitFakeCmd(&fcmd, cmd, args...) },
 | 
			
		||||
			func(cmd string, args ...string) exec.Cmd { return fakeexec.InitFakeCmd(&fcmd, cmd, args...) },
 | 
			
		||||
			func(cmd string, args ...string) exec.Cmd { return fakeexec.InitFakeCmd(&fcmd, cmd, args...) },
 | 
			
		||||
		},
 | 
			
		||||
	}
 | 
			
		||||
	runner := New(&fexec, dbus.NewFake(nil, nil), ProtocolIpv4)
 | 
			
		||||
@@ -487,14 +488,14 @@ func TestGetIPTablesHasCheckCommand(t *testing.T) {
 | 
			
		||||
	}
 | 
			
		||||
 | 
			
		||||
	for _, testCase := range testCases {
 | 
			
		||||
		fcmd := exec.FakeCmd{
 | 
			
		||||
			CombinedOutputScript: []exec.FakeCombinedOutputAction{
 | 
			
		||||
		fcmd := fakeexec.FakeCmd{
 | 
			
		||||
			CombinedOutputScript: []fakeexec.FakeCombinedOutputAction{
 | 
			
		||||
				func() ([]byte, error) { return []byte(testCase.Version), nil },
 | 
			
		||||
			},
 | 
			
		||||
		}
 | 
			
		||||
		fexec := exec.FakeExec{
 | 
			
		||||
			CommandScript: []exec.FakeCommandAction{
 | 
			
		||||
				func(cmd string, args ...string) exec.Cmd { return exec.InitFakeCmd(&fcmd, cmd, args...) },
 | 
			
		||||
		fexec := fakeexec.FakeExec{
 | 
			
		||||
			CommandScript: []fakeexec.FakeCommandAction{
 | 
			
		||||
				func(cmd string, args ...string) exec.Cmd { return fakeexec.InitFakeCmd(&fcmd, cmd, args...) },
 | 
			
		||||
			},
 | 
			
		||||
		}
 | 
			
		||||
		version, err := getIPTablesVersionString(&fexec)
 | 
			
		||||
@@ -520,16 +521,16 @@ func TestCheckRuleWithoutCheckPresent(t *testing.T) {
 | 
			
		||||
COMMIT
 | 
			
		||||
# Completed on Wed Oct 29 14:56:01 2014`
 | 
			
		||||
 | 
			
		||||
	fcmd := exec.FakeCmd{
 | 
			
		||||
		CombinedOutputScript: []exec.FakeCombinedOutputAction{
 | 
			
		||||
	fcmd := fakeexec.FakeCmd{
 | 
			
		||||
		CombinedOutputScript: []fakeexec.FakeCombinedOutputAction{
 | 
			
		||||
			// Success.
 | 
			
		||||
			func() ([]byte, error) { return []byte(iptables_save_output), nil },
 | 
			
		||||
		},
 | 
			
		||||
	}
 | 
			
		||||
	fexec := exec.FakeExec{
 | 
			
		||||
		CommandScript: []exec.FakeCommandAction{
 | 
			
		||||
	fexec := fakeexec.FakeExec{
 | 
			
		||||
		CommandScript: []fakeexec.FakeCommandAction{
 | 
			
		||||
			// The first Command() call is checking the rule.  Success of that exec means "done".
 | 
			
		||||
			func(cmd string, args ...string) exec.Cmd { return exec.InitFakeCmd(&fcmd, cmd, args...) },
 | 
			
		||||
			func(cmd string, args ...string) exec.Cmd { return fakeexec.InitFakeCmd(&fcmd, cmd, args...) },
 | 
			
		||||
		},
 | 
			
		||||
	}
 | 
			
		||||
	runner := &runner{exec: &fexec}
 | 
			
		||||
@@ -563,16 +564,16 @@ func TestCheckRuleWithoutCheckAbsent(t *testing.T) {
 | 
			
		||||
COMMIT
 | 
			
		||||
# Completed on Wed Oct 29 14:56:01 2014`
 | 
			
		||||
 | 
			
		||||
	fcmd := exec.FakeCmd{
 | 
			
		||||
		CombinedOutputScript: []exec.FakeCombinedOutputAction{
 | 
			
		||||
	fcmd := fakeexec.FakeCmd{
 | 
			
		||||
		CombinedOutputScript: []fakeexec.FakeCombinedOutputAction{
 | 
			
		||||
			// Success.
 | 
			
		||||
			func() ([]byte, error) { return []byte(iptables_save_output), nil },
 | 
			
		||||
		},
 | 
			
		||||
	}
 | 
			
		||||
	fexec := exec.FakeExec{
 | 
			
		||||
		CommandScript: []exec.FakeCommandAction{
 | 
			
		||||
	fexec := fakeexec.FakeExec{
 | 
			
		||||
		CommandScript: []fakeexec.FakeCommandAction{
 | 
			
		||||
			// The first Command() call is checking the rule.  Success of that exec means "done".
 | 
			
		||||
			func(cmd string, args ...string) exec.Cmd { return exec.InitFakeCmd(&fcmd, cmd, args...) },
 | 
			
		||||
			func(cmd string, args ...string) exec.Cmd { return fakeexec.InitFakeCmd(&fcmd, cmd, args...) },
 | 
			
		||||
		},
 | 
			
		||||
	}
 | 
			
		||||
	runner := &runner{exec: &fexec}
 | 
			
		||||
@@ -615,8 +616,8 @@ func TestIPTablesWaitFlag(t *testing.T) {
 | 
			
		||||
}
 | 
			
		||||
 | 
			
		||||
func TestWaitFlagUnavailable(t *testing.T) {
 | 
			
		||||
	fcmd := exec.FakeCmd{
 | 
			
		||||
		CombinedOutputScript: []exec.FakeCombinedOutputAction{
 | 
			
		||||
	fcmd := fakeexec.FakeCmd{
 | 
			
		||||
		CombinedOutputScript: []fakeexec.FakeCombinedOutputAction{
 | 
			
		||||
			// iptables version check
 | 
			
		||||
			func() ([]byte, error) { return []byte("iptables v1.4.19"), nil },
 | 
			
		||||
			// iptables-restore version check
 | 
			
		||||
@@ -625,13 +626,13 @@ func TestWaitFlagUnavailable(t *testing.T) {
 | 
			
		||||
			func() ([]byte, error) { return []byte{}, nil },
 | 
			
		||||
		},
 | 
			
		||||
	}
 | 
			
		||||
	fexec := exec.FakeExec{
 | 
			
		||||
		CommandScript: []exec.FakeCommandAction{
 | 
			
		||||
	fexec := fakeexec.FakeExec{
 | 
			
		||||
		CommandScript: []fakeexec.FakeCommandAction{
 | 
			
		||||
			// iptables version check
 | 
			
		||||
			func(cmd string, args ...string) exec.Cmd { return exec.InitFakeCmd(&fcmd, cmd, args...) },
 | 
			
		||||
			func(cmd string, args ...string) exec.Cmd { return fakeexec.InitFakeCmd(&fcmd, cmd, args...) },
 | 
			
		||||
			// iptables-restore version check
 | 
			
		||||
			func(cmd string, args ...string) exec.Cmd { return exec.InitFakeCmd(&fcmd, cmd, args...) },
 | 
			
		||||
			func(cmd string, args ...string) exec.Cmd { return exec.InitFakeCmd(&fcmd, cmd, args...) },
 | 
			
		||||
			func(cmd string, args ...string) exec.Cmd { return fakeexec.InitFakeCmd(&fcmd, cmd, args...) },
 | 
			
		||||
			func(cmd string, args ...string) exec.Cmd { return fakeexec.InitFakeCmd(&fcmd, cmd, args...) },
 | 
			
		||||
		},
 | 
			
		||||
	}
 | 
			
		||||
	runner := New(&fexec, dbus.NewFake(nil, nil), ProtocolIpv4)
 | 
			
		||||
@@ -649,8 +650,8 @@ func TestWaitFlagUnavailable(t *testing.T) {
 | 
			
		||||
}
 | 
			
		||||
 | 
			
		||||
func TestWaitFlagOld(t *testing.T) {
 | 
			
		||||
	fcmd := exec.FakeCmd{
 | 
			
		||||
		CombinedOutputScript: []exec.FakeCombinedOutputAction{
 | 
			
		||||
	fcmd := fakeexec.FakeCmd{
 | 
			
		||||
		CombinedOutputScript: []fakeexec.FakeCombinedOutputAction{
 | 
			
		||||
			// iptables version check
 | 
			
		||||
			func() ([]byte, error) { return []byte("iptables v1.4.20"), nil },
 | 
			
		||||
			// iptables-restore version check
 | 
			
		||||
@@ -659,11 +660,11 @@ func TestWaitFlagOld(t *testing.T) {
 | 
			
		||||
			func() ([]byte, error) { return []byte{}, nil },
 | 
			
		||||
		},
 | 
			
		||||
	}
 | 
			
		||||
	fexec := exec.FakeExec{
 | 
			
		||||
		CommandScript: []exec.FakeCommandAction{
 | 
			
		||||
			func(cmd string, args ...string) exec.Cmd { return exec.InitFakeCmd(&fcmd, cmd, args...) },
 | 
			
		||||
			func(cmd string, args ...string) exec.Cmd { return exec.InitFakeCmd(&fcmd, cmd, args...) },
 | 
			
		||||
			func(cmd string, args ...string) exec.Cmd { return exec.InitFakeCmd(&fcmd, cmd, args...) },
 | 
			
		||||
	fexec := fakeexec.FakeExec{
 | 
			
		||||
		CommandScript: []fakeexec.FakeCommandAction{
 | 
			
		||||
			func(cmd string, args ...string) exec.Cmd { return fakeexec.InitFakeCmd(&fcmd, cmd, args...) },
 | 
			
		||||
			func(cmd string, args ...string) exec.Cmd { return fakeexec.InitFakeCmd(&fcmd, cmd, args...) },
 | 
			
		||||
			func(cmd string, args ...string) exec.Cmd { return fakeexec.InitFakeCmd(&fcmd, cmd, args...) },
 | 
			
		||||
		},
 | 
			
		||||
	}
 | 
			
		||||
	runner := New(&fexec, dbus.NewFake(nil, nil), ProtocolIpv4)
 | 
			
		||||
@@ -684,8 +685,8 @@ func TestWaitFlagOld(t *testing.T) {
 | 
			
		||||
}
 | 
			
		||||
 | 
			
		||||
func TestWaitFlagNew(t *testing.T) {
 | 
			
		||||
	fcmd := exec.FakeCmd{
 | 
			
		||||
		CombinedOutputScript: []exec.FakeCombinedOutputAction{
 | 
			
		||||
	fcmd := fakeexec.FakeCmd{
 | 
			
		||||
		CombinedOutputScript: []fakeexec.FakeCombinedOutputAction{
 | 
			
		||||
			// iptables version check
 | 
			
		||||
			func() ([]byte, error) { return []byte("iptables v1.4.22"), nil },
 | 
			
		||||
			// iptables-restore version check
 | 
			
		||||
@@ -694,11 +695,11 @@ func TestWaitFlagNew(t *testing.T) {
 | 
			
		||||
			func() ([]byte, error) { return []byte{}, nil },
 | 
			
		||||
		},
 | 
			
		||||
	}
 | 
			
		||||
	fexec := exec.FakeExec{
 | 
			
		||||
		CommandScript: []exec.FakeCommandAction{
 | 
			
		||||
			func(cmd string, args ...string) exec.Cmd { return exec.InitFakeCmd(&fcmd, cmd, args...) },
 | 
			
		||||
			func(cmd string, args ...string) exec.Cmd { return exec.InitFakeCmd(&fcmd, cmd, args...) },
 | 
			
		||||
			func(cmd string, args ...string) exec.Cmd { return exec.InitFakeCmd(&fcmd, cmd, args...) },
 | 
			
		||||
	fexec := fakeexec.FakeExec{
 | 
			
		||||
		CommandScript: []fakeexec.FakeCommandAction{
 | 
			
		||||
			func(cmd string, args ...string) exec.Cmd { return fakeexec.InitFakeCmd(&fcmd, cmd, args...) },
 | 
			
		||||
			func(cmd string, args ...string) exec.Cmd { return fakeexec.InitFakeCmd(&fcmd, cmd, args...) },
 | 
			
		||||
			func(cmd string, args ...string) exec.Cmd { return fakeexec.InitFakeCmd(&fcmd, cmd, args...) },
 | 
			
		||||
		},
 | 
			
		||||
	}
 | 
			
		||||
	runner := New(&fexec, dbus.NewFake(nil, nil), ProtocolIpv4)
 | 
			
		||||
@@ -726,8 +727,8 @@ func TestReload(t *testing.T) {
 | 
			
		||||
 | 
			
		||||
	reloaded := make(chan bool, 2)
 | 
			
		||||
 | 
			
		||||
	fcmd := exec.FakeCmd{
 | 
			
		||||
		CombinedOutputScript: []exec.FakeCombinedOutputAction{
 | 
			
		||||
	fcmd := fakeexec.FakeCmd{
 | 
			
		||||
		CombinedOutputScript: []fakeexec.FakeCombinedOutputAction{
 | 
			
		||||
			// iptables version check
 | 
			
		||||
			func() ([]byte, error) { return []byte("iptables v1.4.22"), nil },
 | 
			
		||||
			// iptables-restore version check
 | 
			
		||||
@@ -737,7 +738,7 @@ func TestReload(t *testing.T) {
 | 
			
		||||
			// EnsureChain
 | 
			
		||||
			func() ([]byte, error) { return []byte{}, nil },
 | 
			
		||||
			// EnsureRule abc check
 | 
			
		||||
			func() ([]byte, error) { return []byte{}, &exec.FakeExitError{Status: 1} },
 | 
			
		||||
			func() ([]byte, error) { return []byte{}, &fakeexec.FakeExitError{Status: 1} },
 | 
			
		||||
			// EnsureRule abc
 | 
			
		||||
			func() ([]byte, error) { return []byte{}, nil },
 | 
			
		||||
 | 
			
		||||
@@ -745,21 +746,21 @@ func TestReload(t *testing.T) {
 | 
			
		||||
			// EnsureChain
 | 
			
		||||
			func() ([]byte, error) { return []byte{}, nil },
 | 
			
		||||
			// EnsureRule abc check
 | 
			
		||||
			func() ([]byte, error) { return []byte{}, &exec.FakeExitError{Status: 1} },
 | 
			
		||||
			func() ([]byte, error) { return []byte{}, &fakeexec.FakeExitError{Status: 1} },
 | 
			
		||||
			// EnsureRule abc
 | 
			
		||||
			func() ([]byte, error) { return []byte{}, nil },
 | 
			
		||||
		},
 | 
			
		||||
	}
 | 
			
		||||
	fexec := exec.FakeExec{
 | 
			
		||||
		CommandScript: []exec.FakeCommandAction{
 | 
			
		||||
			func(cmd string, args ...string) exec.Cmd { return exec.InitFakeCmd(&fcmd, cmd, args...) },
 | 
			
		||||
			func(cmd string, args ...string) exec.Cmd { return exec.InitFakeCmd(&fcmd, cmd, args...) },
 | 
			
		||||
			func(cmd string, args ...string) exec.Cmd { return exec.InitFakeCmd(&fcmd, cmd, args...) },
 | 
			
		||||
			func(cmd string, args ...string) exec.Cmd { return exec.InitFakeCmd(&fcmd, cmd, args...) },
 | 
			
		||||
			func(cmd string, args ...string) exec.Cmd { return exec.InitFakeCmd(&fcmd, cmd, args...) },
 | 
			
		||||
			func(cmd string, args ...string) exec.Cmd { return exec.InitFakeCmd(&fcmd, cmd, args...) },
 | 
			
		||||
			func(cmd string, args ...string) exec.Cmd { return exec.InitFakeCmd(&fcmd, cmd, args...) },
 | 
			
		||||
			func(cmd string, args ...string) exec.Cmd { return exec.InitFakeCmd(&fcmd, cmd, args...) },
 | 
			
		||||
	fexec := fakeexec.FakeExec{
 | 
			
		||||
		CommandScript: []fakeexec.FakeCommandAction{
 | 
			
		||||
			func(cmd string, args ...string) exec.Cmd { return fakeexec.InitFakeCmd(&fcmd, cmd, args...) },
 | 
			
		||||
			func(cmd string, args ...string) exec.Cmd { return fakeexec.InitFakeCmd(&fcmd, cmd, args...) },
 | 
			
		||||
			func(cmd string, args ...string) exec.Cmd { return fakeexec.InitFakeCmd(&fcmd, cmd, args...) },
 | 
			
		||||
			func(cmd string, args ...string) exec.Cmd { return fakeexec.InitFakeCmd(&fcmd, cmd, args...) },
 | 
			
		||||
			func(cmd string, args ...string) exec.Cmd { return fakeexec.InitFakeCmd(&fcmd, cmd, args...) },
 | 
			
		||||
			func(cmd string, args ...string) exec.Cmd { return fakeexec.InitFakeCmd(&fcmd, cmd, args...) },
 | 
			
		||||
			func(cmd string, args ...string) exec.Cmd { return fakeexec.InitFakeCmd(&fcmd, cmd, args...) },
 | 
			
		||||
			func(cmd string, args ...string) exec.Cmd { return fakeexec.InitFakeCmd(&fcmd, cmd, args...) },
 | 
			
		||||
		},
 | 
			
		||||
	}
 | 
			
		||||
 | 
			
		||||
@@ -841,24 +842,24 @@ func TestSaveInto(t *testing.T) {
 | 
			
		||||
COMMIT
 | 
			
		||||
# Completed on Thu Jan 19 11:38:09 2017`
 | 
			
		||||
 | 
			
		||||
	fcmd := exec.FakeCmd{
 | 
			
		||||
		CombinedOutputScript: []exec.FakeCombinedOutputAction{
 | 
			
		||||
	fcmd := fakeexec.FakeCmd{
 | 
			
		||||
		CombinedOutputScript: []fakeexec.FakeCombinedOutputAction{
 | 
			
		||||
			// iptables version check
 | 
			
		||||
			func() ([]byte, error) { return []byte("iptables v1.9.22"), nil },
 | 
			
		||||
			// iptables-restore version check
 | 
			
		||||
			func() ([]byte, error) { return []byte("iptables-restore v1.9.22"), nil },
 | 
			
		||||
		},
 | 
			
		||||
		RunScript: []exec.FakeRunAction{
 | 
			
		||||
		RunScript: []fakeexec.FakeRunAction{
 | 
			
		||||
			func() ([]byte, []byte, error) { return []byte(output), nil, nil },
 | 
			
		||||
			func() ([]byte, []byte, error) { return nil, nil, &exec.FakeExitError{Status: 1} },
 | 
			
		||||
			func() ([]byte, []byte, error) { return nil, nil, &fakeexec.FakeExitError{Status: 1} },
 | 
			
		||||
		},
 | 
			
		||||
	}
 | 
			
		||||
	fexec := exec.FakeExec{
 | 
			
		||||
		CommandScript: []exec.FakeCommandAction{
 | 
			
		||||
			func(cmd string, args ...string) exec.Cmd { return exec.InitFakeCmd(&fcmd, cmd, args...) },
 | 
			
		||||
			func(cmd string, args ...string) exec.Cmd { return exec.InitFakeCmd(&fcmd, cmd, args...) },
 | 
			
		||||
			func(cmd string, args ...string) exec.Cmd { return exec.InitFakeCmd(&fcmd, cmd, args...) },
 | 
			
		||||
			func(cmd string, args ...string) exec.Cmd { return exec.InitFakeCmd(&fcmd, cmd, args...) },
 | 
			
		||||
	fexec := fakeexec.FakeExec{
 | 
			
		||||
		CommandScript: []fakeexec.FakeCommandAction{
 | 
			
		||||
			func(cmd string, args ...string) exec.Cmd { return fakeexec.InitFakeCmd(&fcmd, cmd, args...) },
 | 
			
		||||
			func(cmd string, args ...string) exec.Cmd { return fakeexec.InitFakeCmd(&fcmd, cmd, args...) },
 | 
			
		||||
			func(cmd string, args ...string) exec.Cmd { return fakeexec.InitFakeCmd(&fcmd, cmd, args...) },
 | 
			
		||||
			func(cmd string, args ...string) exec.Cmd { return fakeexec.InitFakeCmd(&fcmd, cmd, args...) },
 | 
			
		||||
		},
 | 
			
		||||
	}
 | 
			
		||||
	runner := New(&fexec, dbus.NewFake(nil, nil), ProtocolIpv4)
 | 
			
		||||
@@ -894,8 +895,8 @@ COMMIT
 | 
			
		||||
}
 | 
			
		||||
 | 
			
		||||
func TestRestore(t *testing.T) {
 | 
			
		||||
	fcmd := exec.FakeCmd{
 | 
			
		||||
		CombinedOutputScript: []exec.FakeCombinedOutputAction{
 | 
			
		||||
	fcmd := fakeexec.FakeCmd{
 | 
			
		||||
		CombinedOutputScript: []fakeexec.FakeCombinedOutputAction{
 | 
			
		||||
			// iptables version check
 | 
			
		||||
			func() ([]byte, error) { return []byte("iptables v1.9.22"), nil },
 | 
			
		||||
			// iptables-restore version check
 | 
			
		||||
@@ -904,18 +905,18 @@ func TestRestore(t *testing.T) {
 | 
			
		||||
			func() ([]byte, error) { return []byte{}, nil },
 | 
			
		||||
			func() ([]byte, error) { return []byte{}, nil },
 | 
			
		||||
			func() ([]byte, error) { return []byte{}, nil },
 | 
			
		||||
			func() ([]byte, error) { return nil, &exec.FakeExitError{Status: 1} },
 | 
			
		||||
			func() ([]byte, error) { return nil, &fakeexec.FakeExitError{Status: 1} },
 | 
			
		||||
		},
 | 
			
		||||
	}
 | 
			
		||||
	fexec := exec.FakeExec{
 | 
			
		||||
		CommandScript: []exec.FakeCommandAction{
 | 
			
		||||
			func(cmd string, args ...string) exec.Cmd { return exec.InitFakeCmd(&fcmd, cmd, args...) },
 | 
			
		||||
			func(cmd string, args ...string) exec.Cmd { return exec.InitFakeCmd(&fcmd, cmd, args...) },
 | 
			
		||||
			func(cmd string, args ...string) exec.Cmd { return exec.InitFakeCmd(&fcmd, cmd, args...) },
 | 
			
		||||
			func(cmd string, args ...string) exec.Cmd { return exec.InitFakeCmd(&fcmd, cmd, args...) },
 | 
			
		||||
			func(cmd string, args ...string) exec.Cmd { return exec.InitFakeCmd(&fcmd, cmd, args...) },
 | 
			
		||||
			func(cmd string, args ...string) exec.Cmd { return exec.InitFakeCmd(&fcmd, cmd, args...) },
 | 
			
		||||
			func(cmd string, args ...string) exec.Cmd { return exec.InitFakeCmd(&fcmd, cmd, args...) },
 | 
			
		||||
	fexec := fakeexec.FakeExec{
 | 
			
		||||
		CommandScript: []fakeexec.FakeCommandAction{
 | 
			
		||||
			func(cmd string, args ...string) exec.Cmd { return fakeexec.InitFakeCmd(&fcmd, cmd, args...) },
 | 
			
		||||
			func(cmd string, args ...string) exec.Cmd { return fakeexec.InitFakeCmd(&fcmd, cmd, args...) },
 | 
			
		||||
			func(cmd string, args ...string) exec.Cmd { return fakeexec.InitFakeCmd(&fcmd, cmd, args...) },
 | 
			
		||||
			func(cmd string, args ...string) exec.Cmd { return fakeexec.InitFakeCmd(&fcmd, cmd, args...) },
 | 
			
		||||
			func(cmd string, args ...string) exec.Cmd { return fakeexec.InitFakeCmd(&fcmd, cmd, args...) },
 | 
			
		||||
			func(cmd string, args ...string) exec.Cmd { return fakeexec.InitFakeCmd(&fcmd, cmd, args...) },
 | 
			
		||||
			func(cmd string, args ...string) exec.Cmd { return fakeexec.InitFakeCmd(&fcmd, cmd, args...) },
 | 
			
		||||
		},
 | 
			
		||||
	}
 | 
			
		||||
	runner := New(&fexec, dbus.NewFake(nil, nil), ProtocolIpv4)
 | 
			
		||||
@@ -978,22 +979,22 @@ func TestRestore(t *testing.T) {
 | 
			
		||||
 | 
			
		||||
// TestRestoreAll tests only the simplest use case, as flag handling code is already tested in TestRestore
 | 
			
		||||
func TestRestoreAll(t *testing.T) {
 | 
			
		||||
	fcmd := exec.FakeCmd{
 | 
			
		||||
		CombinedOutputScript: []exec.FakeCombinedOutputAction{
 | 
			
		||||
	fcmd := fakeexec.FakeCmd{
 | 
			
		||||
		CombinedOutputScript: []fakeexec.FakeCombinedOutputAction{
 | 
			
		||||
			// iptables version check
 | 
			
		||||
			func() ([]byte, error) { return []byte("iptables v1.9.22"), nil },
 | 
			
		||||
			// iptables-restore version check
 | 
			
		||||
			func() ([]byte, error) { return []byte("iptables-restore v1.9.22"), nil },
 | 
			
		||||
			func() ([]byte, error) { return []byte{}, nil },
 | 
			
		||||
			func() ([]byte, error) { return nil, &exec.FakeExitError{Status: 1} },
 | 
			
		||||
			func() ([]byte, error) { return nil, &fakeexec.FakeExitError{Status: 1} },
 | 
			
		||||
		},
 | 
			
		||||
	}
 | 
			
		||||
	fexec := exec.FakeExec{
 | 
			
		||||
		CommandScript: []exec.FakeCommandAction{
 | 
			
		||||
			func(cmd string, args ...string) exec.Cmd { return exec.InitFakeCmd(&fcmd, cmd, args...) },
 | 
			
		||||
			func(cmd string, args ...string) exec.Cmd { return exec.InitFakeCmd(&fcmd, cmd, args...) },
 | 
			
		||||
			func(cmd string, args ...string) exec.Cmd { return exec.InitFakeCmd(&fcmd, cmd, args...) },
 | 
			
		||||
			func(cmd string, args ...string) exec.Cmd { return exec.InitFakeCmd(&fcmd, cmd, args...) },
 | 
			
		||||
	fexec := fakeexec.FakeExec{
 | 
			
		||||
		CommandScript: []fakeexec.FakeCommandAction{
 | 
			
		||||
			func(cmd string, args ...string) exec.Cmd { return fakeexec.InitFakeCmd(&fcmd, cmd, args...) },
 | 
			
		||||
			func(cmd string, args ...string) exec.Cmd { return fakeexec.InitFakeCmd(&fcmd, cmd, args...) },
 | 
			
		||||
			func(cmd string, args ...string) exec.Cmd { return fakeexec.InitFakeCmd(&fcmd, cmd, args...) },
 | 
			
		||||
			func(cmd string, args ...string) exec.Cmd { return fakeexec.InitFakeCmd(&fcmd, cmd, args...) },
 | 
			
		||||
		},
 | 
			
		||||
	}
 | 
			
		||||
	runner := newInternal(&fexec, dbus.NewFake(nil, nil), ProtocolIpv4, TestLockfilePath)
 | 
			
		||||
@@ -1023,22 +1024,22 @@ func TestRestoreAll(t *testing.T) {
 | 
			
		||||
 | 
			
		||||
// TestRestoreAllWait tests that the "wait" flag is passed to a compatible iptables-restore
 | 
			
		||||
func TestRestoreAllWait(t *testing.T) {
 | 
			
		||||
	fcmd := exec.FakeCmd{
 | 
			
		||||
		CombinedOutputScript: []exec.FakeCombinedOutputAction{
 | 
			
		||||
	fcmd := fakeexec.FakeCmd{
 | 
			
		||||
		CombinedOutputScript: []fakeexec.FakeCombinedOutputAction{
 | 
			
		||||
			// iptables version check
 | 
			
		||||
			func() ([]byte, error) { return []byte("iptables v1.9.22"), nil },
 | 
			
		||||
			// iptables-restore version check
 | 
			
		||||
			func() ([]byte, error) { return []byte("iptables-restore v1.9.22"), nil },
 | 
			
		||||
			func() ([]byte, error) { return []byte{}, nil },
 | 
			
		||||
			func() ([]byte, error) { return nil, &exec.FakeExitError{Status: 1} },
 | 
			
		||||
			func() ([]byte, error) { return nil, &fakeexec.FakeExitError{Status: 1} },
 | 
			
		||||
		},
 | 
			
		||||
	}
 | 
			
		||||
	fexec := exec.FakeExec{
 | 
			
		||||
		CommandScript: []exec.FakeCommandAction{
 | 
			
		||||
			func(cmd string, args ...string) exec.Cmd { return exec.InitFakeCmd(&fcmd, cmd, args...) },
 | 
			
		||||
			func(cmd string, args ...string) exec.Cmd { return exec.InitFakeCmd(&fcmd, cmd, args...) },
 | 
			
		||||
			func(cmd string, args ...string) exec.Cmd { return exec.InitFakeCmd(&fcmd, cmd, args...) },
 | 
			
		||||
			func(cmd string, args ...string) exec.Cmd { return exec.InitFakeCmd(&fcmd, cmd, args...) },
 | 
			
		||||
	fexec := fakeexec.FakeExec{
 | 
			
		||||
		CommandScript: []fakeexec.FakeCommandAction{
 | 
			
		||||
			func(cmd string, args ...string) exec.Cmd { return fakeexec.InitFakeCmd(&fcmd, cmd, args...) },
 | 
			
		||||
			func(cmd string, args ...string) exec.Cmd { return fakeexec.InitFakeCmd(&fcmd, cmd, args...) },
 | 
			
		||||
			func(cmd string, args ...string) exec.Cmd { return fakeexec.InitFakeCmd(&fcmd, cmd, args...) },
 | 
			
		||||
			func(cmd string, args ...string) exec.Cmd { return fakeexec.InitFakeCmd(&fcmd, cmd, args...) },
 | 
			
		||||
		},
 | 
			
		||||
	}
 | 
			
		||||
	runner := newInternal(&fexec, dbus.NewFake(nil, nil), ProtocolIpv4, TestLockfilePath)
 | 
			
		||||
@@ -1069,22 +1070,22 @@ func TestRestoreAllWait(t *testing.T) {
 | 
			
		||||
// TestRestoreAllWaitOldIptablesRestore tests that the "wait" flag is not passed
 | 
			
		||||
// to a in-compatible iptables-restore
 | 
			
		||||
func TestRestoreAllWaitOldIptablesRestore(t *testing.T) {
 | 
			
		||||
	fcmd := exec.FakeCmd{
 | 
			
		||||
		CombinedOutputScript: []exec.FakeCombinedOutputAction{
 | 
			
		||||
	fcmd := fakeexec.FakeCmd{
 | 
			
		||||
		CombinedOutputScript: []fakeexec.FakeCombinedOutputAction{
 | 
			
		||||
			// iptables version check
 | 
			
		||||
			func() ([]byte, error) { return []byte("iptables v1.9.22"), nil },
 | 
			
		||||
			// iptables-restore version check
 | 
			
		||||
			func() ([]byte, error) { return []byte("unrecognized option: --version"), nil },
 | 
			
		||||
			func() ([]byte, error) { return []byte{}, nil },
 | 
			
		||||
			func() ([]byte, error) { return nil, &exec.FakeExitError{Status: 1} },
 | 
			
		||||
			func() ([]byte, error) { return nil, &fakeexec.FakeExitError{Status: 1} },
 | 
			
		||||
		},
 | 
			
		||||
	}
 | 
			
		||||
	fexec := exec.FakeExec{
 | 
			
		||||
		CommandScript: []exec.FakeCommandAction{
 | 
			
		||||
			func(cmd string, args ...string) exec.Cmd { return exec.InitFakeCmd(&fcmd, cmd, args...) },
 | 
			
		||||
			func(cmd string, args ...string) exec.Cmd { return exec.InitFakeCmd(&fcmd, cmd, args...) },
 | 
			
		||||
			func(cmd string, args ...string) exec.Cmd { return exec.InitFakeCmd(&fcmd, cmd, args...) },
 | 
			
		||||
			func(cmd string, args ...string) exec.Cmd { return exec.InitFakeCmd(&fcmd, cmd, args...) },
 | 
			
		||||
	fexec := fakeexec.FakeExec{
 | 
			
		||||
		CommandScript: []fakeexec.FakeCommandAction{
 | 
			
		||||
			func(cmd string, args ...string) exec.Cmd { return fakeexec.InitFakeCmd(&fcmd, cmd, args...) },
 | 
			
		||||
			func(cmd string, args ...string) exec.Cmd { return fakeexec.InitFakeCmd(&fcmd, cmd, args...) },
 | 
			
		||||
			func(cmd string, args ...string) exec.Cmd { return fakeexec.InitFakeCmd(&fcmd, cmd, args...) },
 | 
			
		||||
			func(cmd string, args ...string) exec.Cmd { return fakeexec.InitFakeCmd(&fcmd, cmd, args...) },
 | 
			
		||||
		},
 | 
			
		||||
	}
 | 
			
		||||
	runner := newInternal(&fexec, dbus.NewFake(nil, nil), ProtocolIpv4, TestLockfilePath)
 | 
			
		||||
@@ -1119,18 +1120,18 @@ func TestRestoreAllWaitOldIptablesRestore(t *testing.T) {
 | 
			
		||||
// iptables /run lock when using an iptables-restore version that does not
 | 
			
		||||
// support the --wait argument
 | 
			
		||||
func TestRestoreAllGrabNewLock(t *testing.T) {
 | 
			
		||||
	fcmd := exec.FakeCmd{
 | 
			
		||||
		CombinedOutputScript: []exec.FakeCombinedOutputAction{
 | 
			
		||||
	fcmd := fakeexec.FakeCmd{
 | 
			
		||||
		CombinedOutputScript: []fakeexec.FakeCombinedOutputAction{
 | 
			
		||||
			// iptables version check
 | 
			
		||||
			func() ([]byte, error) { return []byte("iptables v1.9.22"), nil },
 | 
			
		||||
			// iptables-restore version check
 | 
			
		||||
			func() ([]byte, error) { return []byte("unrecognized option: --version"), nil },
 | 
			
		||||
		},
 | 
			
		||||
	}
 | 
			
		||||
	fexec := exec.FakeExec{
 | 
			
		||||
		CommandScript: []exec.FakeCommandAction{
 | 
			
		||||
			func(cmd string, args ...string) exec.Cmd { return exec.InitFakeCmd(&fcmd, cmd, args...) },
 | 
			
		||||
			func(cmd string, args ...string) exec.Cmd { return exec.InitFakeCmd(&fcmd, cmd, args...) },
 | 
			
		||||
	fexec := fakeexec.FakeExec{
 | 
			
		||||
		CommandScript: []fakeexec.FakeCommandAction{
 | 
			
		||||
			func(cmd string, args ...string) exec.Cmd { return fakeexec.InitFakeCmd(&fcmd, cmd, args...) },
 | 
			
		||||
			func(cmd string, args ...string) exec.Cmd { return fakeexec.InitFakeCmd(&fcmd, cmd, args...) },
 | 
			
		||||
		},
 | 
			
		||||
	}
 | 
			
		||||
 | 
			
		||||
@@ -1162,18 +1163,18 @@ func TestRestoreAllGrabNewLock(t *testing.T) {
 | 
			
		||||
// iptables @xtables abstract unix socket lock when using an iptables-restore
 | 
			
		||||
// version that does not support the --wait argument
 | 
			
		||||
func TestRestoreAllGrabOldLock(t *testing.T) {
 | 
			
		||||
	fcmd := exec.FakeCmd{
 | 
			
		||||
		CombinedOutputScript: []exec.FakeCombinedOutputAction{
 | 
			
		||||
	fcmd := fakeexec.FakeCmd{
 | 
			
		||||
		CombinedOutputScript: []fakeexec.FakeCombinedOutputAction{
 | 
			
		||||
			// iptables version check
 | 
			
		||||
			func() ([]byte, error) { return []byte("iptables v1.9.22"), nil },
 | 
			
		||||
			// iptables-restore version check
 | 
			
		||||
			func() ([]byte, error) { return []byte("unrecognized option: --version"), nil },
 | 
			
		||||
		},
 | 
			
		||||
	}
 | 
			
		||||
	fexec := exec.FakeExec{
 | 
			
		||||
		CommandScript: []exec.FakeCommandAction{
 | 
			
		||||
			func(cmd string, args ...string) exec.Cmd { return exec.InitFakeCmd(&fcmd, cmd, args...) },
 | 
			
		||||
			func(cmd string, args ...string) exec.Cmd { return exec.InitFakeCmd(&fcmd, cmd, args...) },
 | 
			
		||||
	fexec := fakeexec.FakeExec{
 | 
			
		||||
		CommandScript: []fakeexec.FakeCommandAction{
 | 
			
		||||
			func(cmd string, args ...string) exec.Cmd { return fakeexec.InitFakeCmd(&fcmd, cmd, args...) },
 | 
			
		||||
			func(cmd string, args ...string) exec.Cmd { return fakeexec.InitFakeCmd(&fcmd, cmd, args...) },
 | 
			
		||||
		},
 | 
			
		||||
	}
 | 
			
		||||
 | 
			
		||||
 
 | 
			
		||||
@@ -19,9 +19,9 @@ go_library(
 | 
			
		||||
    ],
 | 
			
		||||
    tags = ["automanaged"],
 | 
			
		||||
    deps = [
 | 
			
		||||
        "//pkg/util/exec:go_default_library",
 | 
			
		||||
        "//vendor/github.com/golang/glog:go_default_library",
 | 
			
		||||
        "//vendor/k8s.io/apimachinery/pkg/util/sets:go_default_library",
 | 
			
		||||
        "//vendor/k8s.io/utils/exec:go_default_library",
 | 
			
		||||
    ],
 | 
			
		||||
)
 | 
			
		||||
 | 
			
		||||
@@ -34,7 +34,10 @@ go_test(
 | 
			
		||||
    ],
 | 
			
		||||
    library = ":go_default_library",
 | 
			
		||||
    tags = ["automanaged"],
 | 
			
		||||
    deps = ["//pkg/util/exec:go_default_library"],
 | 
			
		||||
    deps = [
 | 
			
		||||
        "//vendor/k8s.io/utils/exec:go_default_library",
 | 
			
		||||
        "//vendor/k8s.io/utils/exec/testing:go_default_library",
 | 
			
		||||
    ],
 | 
			
		||||
)
 | 
			
		||||
 | 
			
		||||
filegroup(
 | 
			
		||||
 
 | 
			
		||||
@@ -25,7 +25,7 @@ import (
 | 
			
		||||
	"strings"
 | 
			
		||||
 | 
			
		||||
	"github.com/golang/glog"
 | 
			
		||||
	"k8s.io/kubernetes/pkg/util/exec"
 | 
			
		||||
	"k8s.io/utils/exec"
 | 
			
		||||
)
 | 
			
		||||
 | 
			
		||||
const (
 | 
			
		||||
 
 | 
			
		||||
@@ -31,7 +31,7 @@ import (
 | 
			
		||||
 | 
			
		||||
	"github.com/golang/glog"
 | 
			
		||||
	"k8s.io/apimachinery/pkg/util/sets"
 | 
			
		||||
	utilexec "k8s.io/kubernetes/pkg/util/exec"
 | 
			
		||||
	utilexec "k8s.io/utils/exec"
 | 
			
		||||
)
 | 
			
		||||
 | 
			
		||||
const (
 | 
			
		||||
 
 | 
			
		||||
@@ -25,7 +25,7 @@ import (
 | 
			
		||||
	"strings"
 | 
			
		||||
 | 
			
		||||
	"github.com/golang/glog"
 | 
			
		||||
	"k8s.io/kubernetes/pkg/util/exec"
 | 
			
		||||
	"k8s.io/utils/exec"
 | 
			
		||||
)
 | 
			
		||||
 | 
			
		||||
// NsenterMounter is part of experimental support for running the kubelet
 | 
			
		||||
 
 | 
			
		||||
@@ -21,7 +21,8 @@ import (
 | 
			
		||||
	"runtime"
 | 
			
		||||
	"testing"
 | 
			
		||||
 | 
			
		||||
	"k8s.io/kubernetes/pkg/util/exec"
 | 
			
		||||
	"k8s.io/utils/exec"
 | 
			
		||||
	fakeexec "k8s.io/utils/exec/testing"
 | 
			
		||||
)
 | 
			
		||||
 | 
			
		||||
type ErrorMounter struct {
 | 
			
		||||
@@ -74,7 +75,7 @@ func TestSafeFormatAndMount(t *testing.T) {
 | 
			
		||||
			description: "Test 'fsck' fails with exit status 4",
 | 
			
		||||
			fstype:      "ext4",
 | 
			
		||||
			execScripts: []ExecArgs{
 | 
			
		||||
				{"fsck", []string{"-a", "/dev/foo"}, "", &exec.FakeExitError{Status: 4}},
 | 
			
		||||
				{"fsck", []string{"-a", "/dev/foo"}, "", &fakeexec.FakeExitError{Status: 4}},
 | 
			
		||||
			},
 | 
			
		||||
			expectedError: fmt.Errorf("'fsck' found errors on device /dev/foo but could not correct them: ."),
 | 
			
		||||
		},
 | 
			
		||||
@@ -82,14 +83,14 @@ func TestSafeFormatAndMount(t *testing.T) {
 | 
			
		||||
			description: "Test 'fsck' fails with exit status 1 (errors found and corrected)",
 | 
			
		||||
			fstype:      "ext4",
 | 
			
		||||
			execScripts: []ExecArgs{
 | 
			
		||||
				{"fsck", []string{"-a", "/dev/foo"}, "", &exec.FakeExitError{Status: 1}},
 | 
			
		||||
				{"fsck", []string{"-a", "/dev/foo"}, "", &fakeexec.FakeExitError{Status: 1}},
 | 
			
		||||
			},
 | 
			
		||||
		},
 | 
			
		||||
		{
 | 
			
		||||
			description: "Test 'fsck' fails with exit status other than 1 and 4 (likely unformatted device)",
 | 
			
		||||
			fstype:      "ext4",
 | 
			
		||||
			execScripts: []ExecArgs{
 | 
			
		||||
				{"fsck", []string{"-a", "/dev/foo"}, "", &exec.FakeExitError{Status: 8}},
 | 
			
		||||
				{"fsck", []string{"-a", "/dev/foo"}, "", &fakeexec.FakeExitError{Status: 8}},
 | 
			
		||||
			},
 | 
			
		||||
		},
 | 
			
		||||
		{
 | 
			
		||||
@@ -180,7 +181,7 @@ func TestSafeFormatAndMount(t *testing.T) {
 | 
			
		||||
	}
 | 
			
		||||
 | 
			
		||||
	for _, test := range tests {
 | 
			
		||||
		commandScripts := []exec.FakeCommandAction{}
 | 
			
		||||
		commandScripts := []fakeexec.FakeCommandAction{}
 | 
			
		||||
		for _, expected := range test.execScripts {
 | 
			
		||||
			ecmd := expected.command
 | 
			
		||||
			eargs := expected.args
 | 
			
		||||
@@ -196,17 +197,17 @@ func TestSafeFormatAndMount(t *testing.T) {
 | 
			
		||||
						t.Errorf("Unexpected args %v. Expecting %v", args, eargs)
 | 
			
		||||
					}
 | 
			
		||||
				}
 | 
			
		||||
				fake := exec.FakeCmd{
 | 
			
		||||
					CombinedOutputScript: []exec.FakeCombinedOutputAction{
 | 
			
		||||
				fake := fakeexec.FakeCmd{
 | 
			
		||||
					CombinedOutputScript: []fakeexec.FakeCombinedOutputAction{
 | 
			
		||||
						func() ([]byte, error) { return []byte(output), err },
 | 
			
		||||
					},
 | 
			
		||||
				}
 | 
			
		||||
				return exec.InitFakeCmd(&fake, cmd, args...)
 | 
			
		||||
				return fakeexec.InitFakeCmd(&fake, cmd, args...)
 | 
			
		||||
			}
 | 
			
		||||
			commandScripts = append(commandScripts, commandScript)
 | 
			
		||||
		}
 | 
			
		||||
 | 
			
		||||
		fake := exec.FakeExec{
 | 
			
		||||
		fake := fakeexec.FakeExec{
 | 
			
		||||
			CommandScript: commandScripts,
 | 
			
		||||
		}
 | 
			
		||||
 | 
			
		||||
 
 | 
			
		||||
@@ -15,8 +15,8 @@ go_library(
 | 
			
		||||
    ],
 | 
			
		||||
    tags = ["automanaged"],
 | 
			
		||||
    deps = [
 | 
			
		||||
        "//pkg/util/exec:go_default_library",
 | 
			
		||||
        "//vendor/github.com/golang/glog:go_default_library",
 | 
			
		||||
        "//vendor/k8s.io/utils/exec:go_default_library",
 | 
			
		||||
    ],
 | 
			
		||||
)
 | 
			
		||||
 | 
			
		||||
 
 | 
			
		||||
@@ -25,7 +25,7 @@ import (
 | 
			
		||||
	"time"
 | 
			
		||||
 | 
			
		||||
	"github.com/golang/glog"
 | 
			
		||||
	utilexec "k8s.io/kubernetes/pkg/util/exec"
 | 
			
		||||
	utilexec "k8s.io/utils/exec"
 | 
			
		||||
)
 | 
			
		||||
 | 
			
		||||
// Interface is an injectable interface for running netsh commands.  Implementations must be goroutine-safe.
 | 
			
		||||
 
 | 
			
		||||
@@ -20,7 +20,6 @@ go_library(
 | 
			
		||||
    deps = [
 | 
			
		||||
        "//pkg/cloudprovider:go_default_library",
 | 
			
		||||
        "//pkg/cloudprovider/providers/aws:go_default_library",
 | 
			
		||||
        "//pkg/util/exec:go_default_library",
 | 
			
		||||
        "//pkg/util/mount:go_default_library",
 | 
			
		||||
        "//pkg/util/strings:go_default_library",
 | 
			
		||||
        "//pkg/volume:go_default_library",
 | 
			
		||||
@@ -31,6 +30,7 @@ go_library(
 | 
			
		||||
        "//vendor/k8s.io/apimachinery/pkg/api/resource:go_default_library",
 | 
			
		||||
        "//vendor/k8s.io/apimachinery/pkg/apis/meta/v1:go_default_library",
 | 
			
		||||
        "//vendor/k8s.io/apimachinery/pkg/types:go_default_library",
 | 
			
		||||
        "//vendor/k8s.io/utils/exec:go_default_library",
 | 
			
		||||
    ],
 | 
			
		||||
)
 | 
			
		||||
 | 
			
		||||
 
 | 
			
		||||
@@ -26,10 +26,10 @@ import (
 | 
			
		||||
	"github.com/golang/glog"
 | 
			
		||||
	"k8s.io/apimachinery/pkg/types"
 | 
			
		||||
	"k8s.io/kubernetes/pkg/cloudprovider/providers/aws"
 | 
			
		||||
	"k8s.io/kubernetes/pkg/util/exec"
 | 
			
		||||
	"k8s.io/kubernetes/pkg/util/mount"
 | 
			
		||||
	"k8s.io/kubernetes/pkg/volume"
 | 
			
		||||
	volumeutil "k8s.io/kubernetes/pkg/volume/util"
 | 
			
		||||
	"k8s.io/utils/exec"
 | 
			
		||||
)
 | 
			
		||||
 | 
			
		||||
type awsElasticBlockStoreAttacher struct {
 | 
			
		||||
 
 | 
			
		||||
@@ -30,12 +30,12 @@ import (
 | 
			
		||||
	metav1 "k8s.io/apimachinery/pkg/apis/meta/v1"
 | 
			
		||||
	"k8s.io/apimachinery/pkg/types"
 | 
			
		||||
	"k8s.io/kubernetes/pkg/cloudprovider/providers/aws"
 | 
			
		||||
	"k8s.io/kubernetes/pkg/util/exec"
 | 
			
		||||
	"k8s.io/kubernetes/pkg/util/mount"
 | 
			
		||||
	kstrings "k8s.io/kubernetes/pkg/util/strings"
 | 
			
		||||
	"k8s.io/kubernetes/pkg/volume"
 | 
			
		||||
	"k8s.io/kubernetes/pkg/volume/util"
 | 
			
		||||
	"k8s.io/kubernetes/pkg/volume/util/volumehelper"
 | 
			
		||||
	"k8s.io/utils/exec"
 | 
			
		||||
)
 | 
			
		||||
 | 
			
		||||
// This is the primary entrypoint for volume plugins.
 | 
			
		||||
 
 | 
			
		||||
@@ -22,7 +22,6 @@ go_library(
 | 
			
		||||
        "//pkg/api:go_default_library",
 | 
			
		||||
        "//pkg/cloudprovider:go_default_library",
 | 
			
		||||
        "//pkg/cloudprovider/providers/azure:go_default_library",
 | 
			
		||||
        "//pkg/util/exec:go_default_library",
 | 
			
		||||
        "//pkg/util/keymutex:go_default_library",
 | 
			
		||||
        "//pkg/util/mount:go_default_library",
 | 
			
		||||
        "//pkg/util/strings:go_default_library",
 | 
			
		||||
@@ -37,6 +36,7 @@ go_library(
 | 
			
		||||
        "//vendor/k8s.io/apimachinery/pkg/types:go_default_library",
 | 
			
		||||
        "//vendor/k8s.io/apimachinery/pkg/util/sets:go_default_library",
 | 
			
		||||
        "//vendor/k8s.io/apimachinery/pkg/util/wait:go_default_library",
 | 
			
		||||
        "//vendor/k8s.io/utils/exec:go_default_library",
 | 
			
		||||
    ],
 | 
			
		||||
)
 | 
			
		||||
 | 
			
		||||
@@ -62,10 +62,11 @@ go_test(
 | 
			
		||||
    library = ":go_default_library",
 | 
			
		||||
    tags = ["automanaged"],
 | 
			
		||||
    deps = [
 | 
			
		||||
        "//pkg/util/exec:go_default_library",
 | 
			
		||||
        "//pkg/volume:go_default_library",
 | 
			
		||||
        "//pkg/volume/testing:go_default_library",
 | 
			
		||||
        "//vendor/k8s.io/api/core/v1:go_default_library",
 | 
			
		||||
        "//vendor/k8s.io/client-go/util/testing:go_default_library",
 | 
			
		||||
        "//vendor/k8s.io/utils/exec:go_default_library",
 | 
			
		||||
        "//vendor/k8s.io/utils/exec/testing:go_default_library",
 | 
			
		||||
    ],
 | 
			
		||||
)
 | 
			
		||||
 
 | 
			
		||||
@@ -31,11 +31,11 @@ import (
 | 
			
		||||
	"k8s.io/apimachinery/pkg/util/wait"
 | 
			
		||||
	"k8s.io/kubernetes/pkg/cloudprovider"
 | 
			
		||||
	"k8s.io/kubernetes/pkg/cloudprovider/providers/azure"
 | 
			
		||||
	"k8s.io/kubernetes/pkg/util/exec"
 | 
			
		||||
	"k8s.io/kubernetes/pkg/util/keymutex"
 | 
			
		||||
	"k8s.io/kubernetes/pkg/util/mount"
 | 
			
		||||
	"k8s.io/kubernetes/pkg/volume"
 | 
			
		||||
	volumeutil "k8s.io/kubernetes/pkg/volume/util"
 | 
			
		||||
	"k8s.io/utils/exec"
 | 
			
		||||
)
 | 
			
		||||
 | 
			
		||||
type azureDiskDetacher struct {
 | 
			
		||||
 
 | 
			
		||||
@@ -32,10 +32,10 @@ import (
 | 
			
		||||
	"k8s.io/apimachinery/pkg/util/sets"
 | 
			
		||||
	"k8s.io/kubernetes/pkg/api"
 | 
			
		||||
	"k8s.io/kubernetes/pkg/cloudprovider/providers/azure"
 | 
			
		||||
	"k8s.io/kubernetes/pkg/util/exec"
 | 
			
		||||
	"k8s.io/kubernetes/pkg/util/mount"
 | 
			
		||||
	"k8s.io/kubernetes/pkg/util/strings"
 | 
			
		||||
	"k8s.io/kubernetes/pkg/volume"
 | 
			
		||||
	"k8s.io/utils/exec"
 | 
			
		||||
)
 | 
			
		||||
 | 
			
		||||
const (
 | 
			
		||||
 
 | 
			
		||||
@@ -22,7 +22,8 @@ import (
 | 
			
		||||
	"testing"
 | 
			
		||||
	"time"
 | 
			
		||||
 | 
			
		||||
	"k8s.io/kubernetes/pkg/util/exec"
 | 
			
		||||
	"k8s.io/utils/exec"
 | 
			
		||||
	fakeexec "k8s.io/utils/exec/testing"
 | 
			
		||||
)
 | 
			
		||||
 | 
			
		||||
type fakeFileInfo struct {
 | 
			
		||||
@@ -107,9 +108,9 @@ func (handler *fakeIOHandler) Readlink(name string) (string, error) {
 | 
			
		||||
}
 | 
			
		||||
 | 
			
		||||
func TestIoHandler(t *testing.T) {
 | 
			
		||||
	var fcmd exec.FakeCmd
 | 
			
		||||
	fcmd = exec.FakeCmd{
 | 
			
		||||
		CombinedOutputScript: []exec.FakeCombinedOutputAction{
 | 
			
		||||
	var fcmd fakeexec.FakeCmd
 | 
			
		||||
	fcmd = fakeexec.FakeCmd{
 | 
			
		||||
		CombinedOutputScript: []fakeexec.FakeCombinedOutputAction{
 | 
			
		||||
			// cat
 | 
			
		||||
			func() ([]byte, error) {
 | 
			
		||||
				return []byte("Msft    \nVirtual Disk \n"), nil
 | 
			
		||||
@@ -120,10 +121,10 @@ func TestIoHandler(t *testing.T) {
 | 
			
		||||
			},
 | 
			
		||||
		},
 | 
			
		||||
	}
 | 
			
		||||
	fake := exec.FakeExec{
 | 
			
		||||
		CommandScript: []exec.FakeCommandAction{
 | 
			
		||||
			func(cmd string, args ...string) exec.Cmd { return exec.InitFakeCmd(&fcmd, cmd, args...) },
 | 
			
		||||
			func(cmd string, args ...string) exec.Cmd { return exec.InitFakeCmd(&fcmd, cmd, args...) },
 | 
			
		||||
	fake := fakeexec.FakeExec{
 | 
			
		||||
		CommandScript: []fakeexec.FakeCommandAction{
 | 
			
		||||
			func(cmd string, args ...string) exec.Cmd { return fakeexec.InitFakeCmd(&fcmd, cmd, args...) },
 | 
			
		||||
			func(cmd string, args ...string) exec.Cmd { return fakeexec.InitFakeCmd(&fcmd, cmd, args...) },
 | 
			
		||||
		},
 | 
			
		||||
	}
 | 
			
		||||
	disk, err := findDiskByLun(lun, &fakeIOHandler{}, &fake)
 | 
			
		||||
 
 | 
			
		||||
@@ -22,7 +22,6 @@ go_library(
 | 
			
		||||
        "//pkg/cloudprovider/providers/openstack:go_default_library",
 | 
			
		||||
        "//pkg/cloudprovider/providers/rackspace:go_default_library",
 | 
			
		||||
        "//pkg/kubelet/apis:go_default_library",
 | 
			
		||||
        "//pkg/util/exec:go_default_library",
 | 
			
		||||
        "//pkg/util/keymutex:go_default_library",
 | 
			
		||||
        "//pkg/util/mount:go_default_library",
 | 
			
		||||
        "//pkg/util/strings:go_default_library",
 | 
			
		||||
@@ -37,6 +36,7 @@ go_library(
 | 
			
		||||
        "//vendor/k8s.io/apimachinery/pkg/util/sets:go_default_library",
 | 
			
		||||
        "//vendor/k8s.io/apimachinery/pkg/util/wait:go_default_library",
 | 
			
		||||
        "//vendor/k8s.io/client-go/kubernetes:go_default_library",
 | 
			
		||||
        "//vendor/k8s.io/utils/exec:go_default_library",
 | 
			
		||||
    ],
 | 
			
		||||
)
 | 
			
		||||
 | 
			
		||||
 
 | 
			
		||||
@@ -26,10 +26,10 @@ import (
 | 
			
		||||
	"github.com/golang/glog"
 | 
			
		||||
	"k8s.io/apimachinery/pkg/types"
 | 
			
		||||
	"k8s.io/apimachinery/pkg/util/wait"
 | 
			
		||||
	"k8s.io/kubernetes/pkg/util/exec"
 | 
			
		||||
	"k8s.io/kubernetes/pkg/util/mount"
 | 
			
		||||
	"k8s.io/kubernetes/pkg/volume"
 | 
			
		||||
	volumeutil "k8s.io/kubernetes/pkg/volume/util"
 | 
			
		||||
	"k8s.io/utils/exec"
 | 
			
		||||
)
 | 
			
		||||
 | 
			
		||||
type cinderDiskAttacher struct {
 | 
			
		||||
 
 | 
			
		||||
@@ -30,13 +30,13 @@ import (
 | 
			
		||||
	"k8s.io/kubernetes/pkg/cloudprovider"
 | 
			
		||||
	"k8s.io/kubernetes/pkg/cloudprovider/providers/openstack"
 | 
			
		||||
	"k8s.io/kubernetes/pkg/cloudprovider/providers/rackspace"
 | 
			
		||||
	"k8s.io/kubernetes/pkg/util/exec"
 | 
			
		||||
	"k8s.io/kubernetes/pkg/util/keymutex"
 | 
			
		||||
	"k8s.io/kubernetes/pkg/util/mount"
 | 
			
		||||
	"k8s.io/kubernetes/pkg/util/strings"
 | 
			
		||||
	"k8s.io/kubernetes/pkg/volume"
 | 
			
		||||
	"k8s.io/kubernetes/pkg/volume/util"
 | 
			
		||||
	"k8s.io/kubernetes/pkg/volume/util/volumehelper"
 | 
			
		||||
	"k8s.io/utils/exec"
 | 
			
		||||
)
 | 
			
		||||
 | 
			
		||||
// This is the primary entrypoint for volume plugins.
 | 
			
		||||
 
 | 
			
		||||
@@ -31,8 +31,8 @@ import (
 | 
			
		||||
	"k8s.io/apimachinery/pkg/util/sets"
 | 
			
		||||
	clientset "k8s.io/client-go/kubernetes"
 | 
			
		||||
	kubeletapis "k8s.io/kubernetes/pkg/kubelet/apis"
 | 
			
		||||
	"k8s.io/kubernetes/pkg/util/exec"
 | 
			
		||||
	"k8s.io/kubernetes/pkg/volume"
 | 
			
		||||
	"k8s.io/utils/exec"
 | 
			
		||||
)
 | 
			
		||||
 | 
			
		||||
type CinderDiskUtil struct{}
 | 
			
		||||
 
 | 
			
		||||
@@ -19,7 +19,6 @@ go_library(
 | 
			
		||||
    ],
 | 
			
		||||
    tags = ["automanaged"],
 | 
			
		||||
    deps = [
 | 
			
		||||
        "//pkg/util/exec:go_default_library",
 | 
			
		||||
        "//pkg/util/mount:go_default_library",
 | 
			
		||||
        "//pkg/util/strings:go_default_library",
 | 
			
		||||
        "//pkg/volume:go_default_library",
 | 
			
		||||
@@ -27,6 +26,7 @@ go_library(
 | 
			
		||||
        "//vendor/github.com/golang/glog:go_default_library",
 | 
			
		||||
        "//vendor/k8s.io/api/core/v1:go_default_library",
 | 
			
		||||
        "//vendor/k8s.io/apimachinery/pkg/types:go_default_library",
 | 
			
		||||
        "//vendor/k8s.io/utils/exec:go_default_library",
 | 
			
		||||
    ],
 | 
			
		||||
)
 | 
			
		||||
 | 
			
		||||
 
 | 
			
		||||
@@ -24,10 +24,10 @@ import (
 | 
			
		||||
 | 
			
		||||
	"github.com/golang/glog"
 | 
			
		||||
	"k8s.io/apimachinery/pkg/types"
 | 
			
		||||
	"k8s.io/kubernetes/pkg/util/exec"
 | 
			
		||||
	"k8s.io/kubernetes/pkg/util/mount"
 | 
			
		||||
	"k8s.io/kubernetes/pkg/volume"
 | 
			
		||||
	volumeutil "k8s.io/kubernetes/pkg/volume/util"
 | 
			
		||||
	"k8s.io/utils/exec"
 | 
			
		||||
)
 | 
			
		||||
 | 
			
		||||
type fcAttacher struct {
 | 
			
		||||
 
 | 
			
		||||
@@ -23,11 +23,11 @@ import (
 | 
			
		||||
	"github.com/golang/glog"
 | 
			
		||||
	"k8s.io/api/core/v1"
 | 
			
		||||
	"k8s.io/apimachinery/pkg/types"
 | 
			
		||||
	"k8s.io/kubernetes/pkg/util/exec"
 | 
			
		||||
	"k8s.io/kubernetes/pkg/util/mount"
 | 
			
		||||
	"k8s.io/kubernetes/pkg/util/strings"
 | 
			
		||||
	"k8s.io/kubernetes/pkg/volume"
 | 
			
		||||
	"k8s.io/kubernetes/pkg/volume/util"
 | 
			
		||||
	"k8s.io/utils/exec"
 | 
			
		||||
)
 | 
			
		||||
 | 
			
		||||
// This is the primary entrypoint for volume plugins.
 | 
			
		||||
 
 | 
			
		||||
@@ -28,7 +28,6 @@ go_library(
 | 
			
		||||
    ],
 | 
			
		||||
    tags = ["automanaged"],
 | 
			
		||||
    deps = [
 | 
			
		||||
        "//pkg/util/exec:go_default_library",
 | 
			
		||||
        "//pkg/util/mount:go_default_library",
 | 
			
		||||
        "//pkg/util/strings:go_default_library",
 | 
			
		||||
        "//pkg/volume:go_default_library",
 | 
			
		||||
@@ -36,6 +35,7 @@ go_library(
 | 
			
		||||
        "//vendor/github.com/golang/glog:go_default_library",
 | 
			
		||||
        "//vendor/k8s.io/api/core/v1:go_default_library",
 | 
			
		||||
        "//vendor/k8s.io/apimachinery/pkg/types:go_default_library",
 | 
			
		||||
        "//vendor/k8s.io/utils/exec:go_default_library",
 | 
			
		||||
    ],
 | 
			
		||||
)
 | 
			
		||||
 | 
			
		||||
@@ -53,7 +53,6 @@ go_test(
 | 
			
		||||
    library = ":go_default_library",
 | 
			
		||||
    tags = ["automanaged"],
 | 
			
		||||
    deps = [
 | 
			
		||||
        "//pkg/util/exec:go_default_library",
 | 
			
		||||
        "//pkg/util/mount:go_default_library",
 | 
			
		||||
        "//pkg/volume:go_default_library",
 | 
			
		||||
        "//pkg/volume/testing:go_default_library",
 | 
			
		||||
@@ -61,6 +60,8 @@ go_test(
 | 
			
		||||
        "//vendor/k8s.io/apimachinery/pkg/apis/meta/v1:go_default_library",
 | 
			
		||||
        "//vendor/k8s.io/apimachinery/pkg/types:go_default_library",
 | 
			
		||||
        "//vendor/k8s.io/client-go/util/testing:go_default_library",
 | 
			
		||||
        "//vendor/k8s.io/utils/exec:go_default_library",
 | 
			
		||||
        "//vendor/k8s.io/utils/exec/testing:go_default_library",
 | 
			
		||||
    ],
 | 
			
		||||
)
 | 
			
		||||
 | 
			
		||||
 
 | 
			
		||||
@@ -22,9 +22,9 @@ import (
 | 
			
		||||
	"github.com/golang/glog"
 | 
			
		||||
 | 
			
		||||
	"k8s.io/apimachinery/pkg/types"
 | 
			
		||||
	"k8s.io/kubernetes/pkg/util/exec"
 | 
			
		||||
	"k8s.io/kubernetes/pkg/util/mount"
 | 
			
		||||
	"k8s.io/kubernetes/pkg/volume"
 | 
			
		||||
	"k8s.io/utils/exec"
 | 
			
		||||
)
 | 
			
		||||
 | 
			
		||||
type attacherDefaults flexVolumeAttacher
 | 
			
		||||
 
 | 
			
		||||
@@ -23,9 +23,10 @@ import (
 | 
			
		||||
	"k8s.io/api/core/v1"
 | 
			
		||||
	metav1 "k8s.io/apimachinery/pkg/apis/meta/v1"
 | 
			
		||||
	utiltesting "k8s.io/client-go/util/testing"
 | 
			
		||||
	"k8s.io/kubernetes/pkg/util/exec"
 | 
			
		||||
	"k8s.io/kubernetes/pkg/volume"
 | 
			
		||||
	volumetesting "k8s.io/kubernetes/pkg/volume/testing"
 | 
			
		||||
	"k8s.io/utils/exec"
 | 
			
		||||
	fakeexec "k8s.io/utils/exec/testing"
 | 
			
		||||
)
 | 
			
		||||
 | 
			
		||||
func testPlugin() (*flexVolumeAttachablePlugin, string) {
 | 
			
		||||
@@ -43,7 +44,7 @@ func testPlugin() (*flexVolumeAttachablePlugin, string) {
 | 
			
		||||
	}, rootDir
 | 
			
		||||
}
 | 
			
		||||
 | 
			
		||||
func assertDriverCall(t *testing.T, output exec.FakeCombinedOutputAction, expectedCommand string, expectedArgs ...string) exec.FakeCommandAction {
 | 
			
		||||
func assertDriverCall(t *testing.T, output fakeexec.FakeCombinedOutputAction, expectedCommand string, expectedArgs ...string) fakeexec.FakeCommandAction {
 | 
			
		||||
	return func(cmd string, args ...string) exec.Cmd {
 | 
			
		||||
		if cmd != "/plugin/test" {
 | 
			
		||||
			t.Errorf("Wrong executable called: got %v, expected %v", cmd, "/plugin/test")
 | 
			
		||||
@@ -55,20 +56,20 @@ func assertDriverCall(t *testing.T, output exec.FakeCombinedOutputAction, expect
 | 
			
		||||
		if !sameArgs(cmdArgs, expectedArgs) {
 | 
			
		||||
			t.Errorf("Wrong args for %s: got %v, expected %v", args[0], cmdArgs, expectedArgs)
 | 
			
		||||
		}
 | 
			
		||||
		return &exec.FakeCmd{
 | 
			
		||||
		return &fakeexec.FakeCmd{
 | 
			
		||||
			Argv:                 args,
 | 
			
		||||
			CombinedOutputScript: []exec.FakeCombinedOutputAction{output},
 | 
			
		||||
			CombinedOutputScript: []fakeexec.FakeCombinedOutputAction{output},
 | 
			
		||||
		}
 | 
			
		||||
	}
 | 
			
		||||
}
 | 
			
		||||
 | 
			
		||||
func fakeRunner(fakeCommands ...exec.FakeCommandAction) exec.Interface {
 | 
			
		||||
	return &exec.FakeExec{
 | 
			
		||||
func fakeRunner(fakeCommands ...fakeexec.FakeCommandAction) exec.Interface {
 | 
			
		||||
	return &fakeexec.FakeExec{
 | 
			
		||||
		CommandScript: fakeCommands,
 | 
			
		||||
	}
 | 
			
		||||
}
 | 
			
		||||
 | 
			
		||||
func fakeResultOutput(result interface{}) exec.FakeCombinedOutputAction {
 | 
			
		||||
func fakeResultOutput(result interface{}) fakeexec.FakeCombinedOutputAction {
 | 
			
		||||
	return func() ([]byte, error) {
 | 
			
		||||
		bytes, err := json.Marshal(result)
 | 
			
		||||
		if err != nil {
 | 
			
		||||
@@ -78,11 +79,11 @@ func fakeResultOutput(result interface{}) exec.FakeCombinedOutputAction {
 | 
			
		||||
	}
 | 
			
		||||
}
 | 
			
		||||
 | 
			
		||||
func successOutput() exec.FakeCombinedOutputAction {
 | 
			
		||||
func successOutput() fakeexec.FakeCombinedOutputAction {
 | 
			
		||||
	return fakeResultOutput(&DriverStatus{StatusSuccess, "", "", "", true, nil})
 | 
			
		||||
}
 | 
			
		||||
 | 
			
		||||
func notSupportedOutput() exec.FakeCombinedOutputAction {
 | 
			
		||||
func notSupportedOutput() fakeexec.FakeCombinedOutputAction {
 | 
			
		||||
	return fakeResultOutput(&DriverStatus{StatusNotSupported, "", "", "", false, nil})
 | 
			
		||||
}
 | 
			
		||||
 | 
			
		||||
 
 | 
			
		||||
@@ -19,9 +19,9 @@ package flexvolume
 | 
			
		||||
import (
 | 
			
		||||
	"strconv"
 | 
			
		||||
 | 
			
		||||
	"k8s.io/kubernetes/pkg/util/exec"
 | 
			
		||||
	"k8s.io/kubernetes/pkg/util/mount"
 | 
			
		||||
	"k8s.io/kubernetes/pkg/volume"
 | 
			
		||||
	"k8s.io/utils/exec"
 | 
			
		||||
)
 | 
			
		||||
 | 
			
		||||
// FlexVolumeMounter is the disk that will be exposed by this plugin.
 | 
			
		||||
 
 | 
			
		||||
@@ -26,10 +26,10 @@ import (
 | 
			
		||||
 | 
			
		||||
	api "k8s.io/api/core/v1"
 | 
			
		||||
	"k8s.io/apimachinery/pkg/types"
 | 
			
		||||
	"k8s.io/kubernetes/pkg/util/exec"
 | 
			
		||||
	"k8s.io/kubernetes/pkg/util/mount"
 | 
			
		||||
	utilstrings "k8s.io/kubernetes/pkg/util/strings"
 | 
			
		||||
	"k8s.io/kubernetes/pkg/volume"
 | 
			
		||||
	"k8s.io/utils/exec"
 | 
			
		||||
)
 | 
			
		||||
 | 
			
		||||
const flexVolumePluginName = "kubernetes.io/flexvolume"
 | 
			
		||||
 
 | 
			
		||||
@@ -19,7 +19,7 @@ package flexvolume
 | 
			
		||||
import (
 | 
			
		||||
	"testing"
 | 
			
		||||
 | 
			
		||||
	"k8s.io/kubernetes/pkg/util/exec"
 | 
			
		||||
	exec "k8s.io/utils/exec/testing"
 | 
			
		||||
)
 | 
			
		||||
 | 
			
		||||
func TestInit(t *testing.T) {
 | 
			
		||||
 
 | 
			
		||||
@@ -21,9 +21,9 @@ import (
 | 
			
		||||
	"os"
 | 
			
		||||
 | 
			
		||||
	"github.com/golang/glog"
 | 
			
		||||
	"k8s.io/kubernetes/pkg/util/exec"
 | 
			
		||||
	"k8s.io/kubernetes/pkg/volume"
 | 
			
		||||
	"k8s.io/kubernetes/pkg/volume/util"
 | 
			
		||||
	"k8s.io/utils/exec"
 | 
			
		||||
)
 | 
			
		||||
 | 
			
		||||
// FlexVolumeUnmounter is the disk that will be cleaned by this plugin.
 | 
			
		||||
 
 | 
			
		||||
@@ -20,7 +20,6 @@ go_library(
 | 
			
		||||
    deps = [
 | 
			
		||||
        "//pkg/cloudprovider:go_default_library",
 | 
			
		||||
        "//pkg/cloudprovider/providers/gce:go_default_library",
 | 
			
		||||
        "//pkg/util/exec:go_default_library",
 | 
			
		||||
        "//pkg/util/mount:go_default_library",
 | 
			
		||||
        "//pkg/util/strings:go_default_library",
 | 
			
		||||
        "//pkg/volume:go_default_library",
 | 
			
		||||
@@ -32,6 +31,7 @@ go_library(
 | 
			
		||||
        "//vendor/k8s.io/apimachinery/pkg/apis/meta/v1:go_default_library",
 | 
			
		||||
        "//vendor/k8s.io/apimachinery/pkg/types:go_default_library",
 | 
			
		||||
        "//vendor/k8s.io/apimachinery/pkg/util/sets:go_default_library",
 | 
			
		||||
        "//vendor/k8s.io/utils/exec:go_default_library",
 | 
			
		||||
    ],
 | 
			
		||||
)
 | 
			
		||||
 | 
			
		||||
 
 | 
			
		||||
Some files were not shown because too many files have changed in this diff Show More
		Reference in New Issue
	
	Block a user