mirror of
				https://github.com/optim-enterprises-bv/kubernetes.git
				synced 2025-11-03 19:58:17 +00:00 
			
		
		
		
	Merge pull request #72038 from bowei/change-gce-cloud-provider
Change gce cloud provider
This commit is contained in:
		
							
								
								
									
										20
									
								
								Godeps/Godeps.json
									
									
									
										generated
									
									
									
								
							
							
						
						
									
										20
									
								
								Godeps/Godeps.json
									
									
									
										generated
									
									
									
								
							@@ -119,6 +119,26 @@
 | 
			
		||||
			"ImportPath": "github.com/GeertJohan/go.rice/embedded",
 | 
			
		||||
			"Rev": "c02ca9a983da5807ddf7d796784928f5be4afd09"
 | 
			
		||||
		},
 | 
			
		||||
		{
 | 
			
		||||
			"ImportPath": "github.com/GoogleCloudPlatform/k8s-cloud-provider/pkg/cloud",
 | 
			
		||||
			"Comment": "1.2.0",
 | 
			
		||||
			"Rev": "773c7a284e1399960745d0e2c501f577a20d4947"
 | 
			
		||||
		},
 | 
			
		||||
		{
 | 
			
		||||
			"ImportPath": "github.com/GoogleCloudPlatform/k8s-cloud-provider/pkg/cloud/filter",
 | 
			
		||||
			"Comment": "1.2.0",
 | 
			
		||||
			"Rev": "773c7a284e1399960745d0e2c501f577a20d4947"
 | 
			
		||||
		},
 | 
			
		||||
		{
 | 
			
		||||
			"ImportPath": "github.com/GoogleCloudPlatform/k8s-cloud-provider/pkg/cloud/meta",
 | 
			
		||||
			"Comment": "1.2.0",
 | 
			
		||||
			"Rev": "773c7a284e1399960745d0e2c501f577a20d4947"
 | 
			
		||||
		},
 | 
			
		||||
		{
 | 
			
		||||
			"ImportPath": "github.com/GoogleCloudPlatform/k8s-cloud-provider/pkg/cloud/mock",
 | 
			
		||||
			"Comment": "1.2.0",
 | 
			
		||||
			"Rev": "773c7a284e1399960745d0e2c501f577a20d4947"
 | 
			
		||||
		},
 | 
			
		||||
		{
 | 
			
		||||
			"ImportPath": "github.com/JeffAshton/win_pdh",
 | 
			
		||||
			"Rev": "76bb4ee9f0ab50f77826f2a2ee7fb9d3880d6ec2"
 | 
			
		||||
 
 | 
			
		||||
							
								
								
									
										840
									
								
								Godeps/LICENSES
									
									
									
										generated
									
									
									
								
							
							
						
						
									
										840
									
								
								Godeps/LICENSES
									
									
									
										generated
									
									
									
								
							@@ -61242,6 +61242,846 @@ OF THIS SOFTWARE, EVEN IF ADVISED OF THE POSSIBILITY OF SUCH DAMAGE.
 | 
			
		||||
================================================================================
 | 
			
		||||
 | 
			
		||||
 | 
			
		||||
================================================================================
 | 
			
		||||
= vendor/github.com/GoogleCloudPlatform/k8s-cloud-provider/pkg/cloud 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/github.com/GoogleCloudPlatform/k8s-cloud-provider/LICENSE 3b83ef96387f14655fc854ddc3c6bd57
 | 
			
		||||
================================================================================
 | 
			
		||||
 | 
			
		||||
 | 
			
		||||
================================================================================
 | 
			
		||||
= vendor/github.com/GoogleCloudPlatform/k8s-cloud-provider/pkg/cloud/filter 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/github.com/GoogleCloudPlatform/k8s-cloud-provider/LICENSE 3b83ef96387f14655fc854ddc3c6bd57
 | 
			
		||||
================================================================================
 | 
			
		||||
 | 
			
		||||
 | 
			
		||||
================================================================================
 | 
			
		||||
= vendor/github.com/GoogleCloudPlatform/k8s-cloud-provider/pkg/cloud/meta 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/github.com/GoogleCloudPlatform/k8s-cloud-provider/LICENSE 3b83ef96387f14655fc854ddc3c6bd57
 | 
			
		||||
================================================================================
 | 
			
		||||
 | 
			
		||||
 | 
			
		||||
================================================================================
 | 
			
		||||
= vendor/github.com/GoogleCloudPlatform/k8s-cloud-provider/pkg/cloud/mock 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/github.com/GoogleCloudPlatform/k8s-cloud-provider/LICENSE 3b83ef96387f14655fc854ddc3c6bd57
 | 
			
		||||
================================================================================
 | 
			
		||||
 | 
			
		||||
 | 
			
		||||
================================================================================
 | 
			
		||||
= vendor/github.com/gophercloud/gophercloud licensed under: =
 | 
			
		||||
 | 
			
		||||
 
 | 
			
		||||
@@ -87,7 +87,6 @@ pkg/apis/storage/v1beta1/util
 | 
			
		||||
pkg/auth/authorizer/abac
 | 
			
		||||
pkg/capabilities
 | 
			
		||||
pkg/cloudprovider/providers/fake
 | 
			
		||||
pkg/cloudprovider/providers/gce/cloud
 | 
			
		||||
pkg/cloudprovider/providers/photon
 | 
			
		||||
pkg/cloudprovider/providers/vsphere
 | 
			
		||||
pkg/cloudprovider/providers/vsphere/vclib
 | 
			
		||||
 
 | 
			
		||||
@@ -1,38 +0,0 @@
 | 
			
		||||
#!/usr/bin/env bash
 | 
			
		||||
 | 
			
		||||
# Copyright 2018 The Kubernetes Authors.
 | 
			
		||||
#
 | 
			
		||||
# Licensed under the Apache License, Version 2.0 (the "License");
 | 
			
		||||
# you may not use this file except in compliance with the License.
 | 
			
		||||
# You may obtain a copy of the License at
 | 
			
		||||
#
 | 
			
		||||
#     http://www.apache.org/licenses/LICENSE-2.0
 | 
			
		||||
#
 | 
			
		||||
# Unless required by applicable law or agreed to in writing, software
 | 
			
		||||
# distributed under the License is distributed on an "AS IS" BASIS,
 | 
			
		||||
# WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied.
 | 
			
		||||
# See the License for the specific language governing permissions and
 | 
			
		||||
# limitations under the License.
 | 
			
		||||
 | 
			
		||||
set -o errexit
 | 
			
		||||
set -o nounset
 | 
			
		||||
set -o pipefail
 | 
			
		||||
 | 
			
		||||
KUBE_ROOT=$(dirname "${BASH_SOURCE}")/..
 | 
			
		||||
source "${KUBE_ROOT}/hack/lib/init.sh"
 | 
			
		||||
GENERATOR="${KUBE_ROOT}/pkg/cloudprovider/providers/gce/cloud/gen/main.go"
 | 
			
		||||
 | 
			
		||||
GEN_GO="${KUBE_ROOT}/pkg/cloudprovider/providers/gce/cloud/gen.go"
 | 
			
		||||
GEN_TEST_GO="${KUBE_ROOT}/pkg/cloudprovider/providers/gce/cloud/gen_test.go"
 | 
			
		||||
 | 
			
		||||
kube::golang::setup_env
 | 
			
		||||
 | 
			
		||||
TMPFILE=$(mktemp verify-cloudprovider-gce-XXXX)
 | 
			
		||||
trap "{ rm -f ${TMPFILE}; }" EXIT
 | 
			
		||||
 | 
			
		||||
go run "${GENERATOR}" > ${TMPFILE}
 | 
			
		||||
mv "${TMPFILE}" "${GEN_GO}"
 | 
			
		||||
go run "${GENERATOR}" -mode test > ${TMPFILE}
 | 
			
		||||
mv "${TMPFILE}" "${GEN_TEST_GO}"
 | 
			
		||||
 | 
			
		||||
exit 0
 | 
			
		||||
@@ -1,49 +0,0 @@
 | 
			
		||||
#!/usr/bin/env bash
 | 
			
		||||
 | 
			
		||||
# Copyright 2018 The Kubernetes Authors.
 | 
			
		||||
#
 | 
			
		||||
# Licensed under the Apache License, Version 2.0 (the "License");
 | 
			
		||||
# you may not use this file except in compliance with the License.
 | 
			
		||||
# You may obtain a copy of the License at
 | 
			
		||||
#
 | 
			
		||||
#     http://www.apache.org/licenses/LICENSE-2.0
 | 
			
		||||
#
 | 
			
		||||
# Unless required by applicable law or agreed to in writing, software
 | 
			
		||||
# distributed under the License is distributed on an "AS IS" BASIS,
 | 
			
		||||
# WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied.
 | 
			
		||||
# See the License for the specific language governing permissions and
 | 
			
		||||
# limitations under the License.
 | 
			
		||||
 | 
			
		||||
set -o errexit
 | 
			
		||||
set -o nounset
 | 
			
		||||
set -o pipefail
 | 
			
		||||
 | 
			
		||||
KUBE_ROOT=$(dirname "${BASH_SOURCE}")/..
 | 
			
		||||
source "${KUBE_ROOT}/hack/lib/init.sh"
 | 
			
		||||
GENERATOR="${KUBE_ROOT}/pkg/cloudprovider/providers/gce/cloud/gen/main.go"
 | 
			
		||||
 | 
			
		||||
GEN_GO="${KUBE_ROOT}/pkg/cloudprovider/providers/gce/cloud/gen.go"
 | 
			
		||||
GEN_TEST_GO="${KUBE_ROOT}/pkg/cloudprovider/providers/gce/cloud/gen_test.go"
 | 
			
		||||
 | 
			
		||||
kube::golang::setup_env
 | 
			
		||||
 | 
			
		||||
TMPFILE=$(mktemp verify-cloudprovider-gce-XXXX)
 | 
			
		||||
trap "{ rm -f ${TMPFILE}; }" EXIT
 | 
			
		||||
 | 
			
		||||
go run "${GENERATOR}" > ${TMPFILE}
 | 
			
		||||
if ! diff "${TMPFILE}" "${GEN_GO}"; then
 | 
			
		||||
  echo "Generated file ${GEN_GO} needs to be updated (run hack/update-cloudprovider-gce.sh)"
 | 
			
		||||
  echo
 | 
			
		||||
  diff -u "${TMPFILE}" "${GEN_GO}" || true
 | 
			
		||||
  exit 1
 | 
			
		||||
fi
 | 
			
		||||
 | 
			
		||||
go run "${GENERATOR}" -mode test > ${TMPFILE}
 | 
			
		||||
if ! diff "${TMPFILE}" "${GEN_TEST_GO}"; then
 | 
			
		||||
  echo "Generated file ${GEN_TEST_GO} needs to be updated (run hack/update-cloudprovider-gce.sh)"
 | 
			
		||||
  echo
 | 
			
		||||
  diff -u "${TMPFILE}" "${GEN_TEST_GO}" || true
 | 
			
		||||
  exit 1
 | 
			
		||||
fi
 | 
			
		||||
 | 
			
		||||
exit 0
 | 
			
		||||
@@ -47,10 +47,6 @@ go_library(
 | 
			
		||||
    importpath = "k8s.io/kubernetes/pkg/cloudprovider/providers/gce",
 | 
			
		||||
    deps = [
 | 
			
		||||
        "//pkg/api/v1/service:go_default_library",
 | 
			
		||||
        "//pkg/cloudprovider/providers/gce/cloud:go_default_library",
 | 
			
		||||
        "//pkg/cloudprovider/providers/gce/cloud/filter:go_default_library",
 | 
			
		||||
        "//pkg/cloudprovider/providers/gce/cloud/meta:go_default_library",
 | 
			
		||||
        "//pkg/cloudprovider/providers/gce/cloud/mock:go_default_library",
 | 
			
		||||
        "//pkg/controller:go_default_library",
 | 
			
		||||
        "//pkg/features:go_default_library",
 | 
			
		||||
        "//pkg/kubelet/apis:go_default_library",
 | 
			
		||||
@@ -80,6 +76,10 @@ go_library(
 | 
			
		||||
        "//staging/src/k8s.io/client-go/util/flowcontrol:go_default_library",
 | 
			
		||||
        "//staging/src/k8s.io/cloud-provider:go_default_library",
 | 
			
		||||
        "//vendor/cloud.google.com/go/compute/metadata:go_default_library",
 | 
			
		||||
        "//vendor/github.com/GoogleCloudPlatform/k8s-cloud-provider/pkg/cloud:go_default_library",
 | 
			
		||||
        "//vendor/github.com/GoogleCloudPlatform/k8s-cloud-provider/pkg/cloud/filter:go_default_library",
 | 
			
		||||
        "//vendor/github.com/GoogleCloudPlatform/k8s-cloud-provider/pkg/cloud/meta:go_default_library",
 | 
			
		||||
        "//vendor/github.com/GoogleCloudPlatform/k8s-cloud-provider/pkg/cloud/mock:go_default_library",
 | 
			
		||||
        "//vendor/github.com/prometheus/client_golang/prometheus:go_default_library",
 | 
			
		||||
        "//vendor/golang.org/x/oauth2:go_default_library",
 | 
			
		||||
        "//vendor/golang.org/x/oauth2/google:go_default_library",
 | 
			
		||||
@@ -112,9 +112,6 @@ go_test(
 | 
			
		||||
    embed = [":go_default_library"],
 | 
			
		||||
    deps = [
 | 
			
		||||
        "//pkg/api/v1/service:go_default_library",
 | 
			
		||||
        "//pkg/cloudprovider/providers/gce/cloud:go_default_library",
 | 
			
		||||
        "//pkg/cloudprovider/providers/gce/cloud/meta:go_default_library",
 | 
			
		||||
        "//pkg/cloudprovider/providers/gce/cloud/mock:go_default_library",
 | 
			
		||||
        "//pkg/kubelet/apis:go_default_library",
 | 
			
		||||
        "//pkg/util/net/sets:go_default_library",
 | 
			
		||||
        "//staging/src/k8s.io/api/core/v1:go_default_library",
 | 
			
		||||
@@ -123,6 +120,9 @@ go_test(
 | 
			
		||||
        "//staging/src/k8s.io/apimachinery/pkg/util/sets:go_default_library",
 | 
			
		||||
        "//staging/src/k8s.io/client-go/tools/record:go_default_library",
 | 
			
		||||
        "//staging/src/k8s.io/cloud-provider:go_default_library",
 | 
			
		||||
        "//vendor/github.com/GoogleCloudPlatform/k8s-cloud-provider/pkg/cloud:go_default_library",
 | 
			
		||||
        "//vendor/github.com/GoogleCloudPlatform/k8s-cloud-provider/pkg/cloud/meta:go_default_library",
 | 
			
		||||
        "//vendor/github.com/GoogleCloudPlatform/k8s-cloud-provider/pkg/cloud/mock:go_default_library",
 | 
			
		||||
        "//vendor/github.com/stretchr/testify/assert:go_default_library",
 | 
			
		||||
        "//vendor/github.com/stretchr/testify/require:go_default_library",
 | 
			
		||||
        "//vendor/golang.org/x/oauth2/google:go_default_library",
 | 
			
		||||
@@ -142,9 +142,6 @@ filegroup(
 | 
			
		||||
 | 
			
		||||
filegroup(
 | 
			
		||||
    name = "all-srcs",
 | 
			
		||||
    srcs = [
 | 
			
		||||
        ":package-srcs",
 | 
			
		||||
        "//pkg/cloudprovider/providers/gce/cloud:all-srcs",
 | 
			
		||||
    ],
 | 
			
		||||
    srcs = [":package-srcs"],
 | 
			
		||||
    tags = ["automanaged"],
 | 
			
		||||
)
 | 
			
		||||
 
 | 
			
		||||
@@ -1,67 +0,0 @@
 | 
			
		||||
load("@io_bazel_rules_go//go:def.bzl", "go_library", "go_test")
 | 
			
		||||
 | 
			
		||||
go_library(
 | 
			
		||||
    name = "go_default_library",
 | 
			
		||||
    srcs = [
 | 
			
		||||
        "constants.go",
 | 
			
		||||
        "context.go",
 | 
			
		||||
        "doc.go",
 | 
			
		||||
        "gce_projects.go",
 | 
			
		||||
        "gen.go",
 | 
			
		||||
        "op.go",
 | 
			
		||||
        "project.go",
 | 
			
		||||
        "ratelimit.go",
 | 
			
		||||
        "service.go",
 | 
			
		||||
        "utils.go",
 | 
			
		||||
    ],
 | 
			
		||||
    importpath = "k8s.io/kubernetes/pkg/cloudprovider/providers/gce/cloud",
 | 
			
		||||
    visibility = ["//visibility:public"],
 | 
			
		||||
    deps = [
 | 
			
		||||
        "//pkg/cloudprovider/providers/gce/cloud/filter:go_default_library",
 | 
			
		||||
        "//pkg/cloudprovider/providers/gce/cloud/meta:go_default_library",
 | 
			
		||||
        "//vendor/google.golang.org/api/compute/v0.alpha:go_default_library",
 | 
			
		||||
        "//vendor/google.golang.org/api/compute/v0.beta:go_default_library",
 | 
			
		||||
        "//vendor/google.golang.org/api/compute/v1:go_default_library",
 | 
			
		||||
        "//vendor/google.golang.org/api/googleapi:go_default_library",
 | 
			
		||||
        "//vendor/k8s.io/klog:go_default_library",
 | 
			
		||||
    ],
 | 
			
		||||
)
 | 
			
		||||
 | 
			
		||||
go_test(
 | 
			
		||||
    name = "go_default_test",
 | 
			
		||||
    srcs = [
 | 
			
		||||
        "gen_test.go",
 | 
			
		||||
        "mock_test.go",
 | 
			
		||||
        "ratelimit_test.go",
 | 
			
		||||
        "service_test.go",
 | 
			
		||||
        "utils_test.go",
 | 
			
		||||
    ],
 | 
			
		||||
    embed = [":go_default_library"],
 | 
			
		||||
    deps = [
 | 
			
		||||
        "//pkg/cloudprovider/providers/gce/cloud/filter:go_default_library",
 | 
			
		||||
        "//pkg/cloudprovider/providers/gce/cloud/meta:go_default_library",
 | 
			
		||||
        "//vendor/google.golang.org/api/compute/v0.alpha:go_default_library",
 | 
			
		||||
        "//vendor/google.golang.org/api/compute/v0.beta:go_default_library",
 | 
			
		||||
        "//vendor/google.golang.org/api/compute/v1:go_default_library",
 | 
			
		||||
    ],
 | 
			
		||||
)
 | 
			
		||||
 | 
			
		||||
filegroup(
 | 
			
		||||
    name = "package-srcs",
 | 
			
		||||
    srcs = glob(["**"]),
 | 
			
		||||
    tags = ["automanaged"],
 | 
			
		||||
    visibility = ["//visibility:private"],
 | 
			
		||||
)
 | 
			
		||||
 | 
			
		||||
filegroup(
 | 
			
		||||
    name = "all-srcs",
 | 
			
		||||
    srcs = [
 | 
			
		||||
        ":package-srcs",
 | 
			
		||||
        "//pkg/cloudprovider/providers/gce/cloud/filter:all-srcs",
 | 
			
		||||
        "//pkg/cloudprovider/providers/gce/cloud/gen:all-srcs",
 | 
			
		||||
        "//pkg/cloudprovider/providers/gce/cloud/meta:all-srcs",
 | 
			
		||||
        "//pkg/cloudprovider/providers/gce/cloud/mock:all-srcs",
 | 
			
		||||
    ],
 | 
			
		||||
    tags = ["automanaged"],
 | 
			
		||||
    visibility = ["//visibility:public"],
 | 
			
		||||
)
 | 
			
		||||
@@ -1,176 +0,0 @@
 | 
			
		||||
/*
 | 
			
		||||
Copyright 2017 The Kubernetes Authors.
 | 
			
		||||
 | 
			
		||||
Licensed under the Apache License, Version 2.0 (the "License");
 | 
			
		||||
you may not use this file except in compliance with the License.
 | 
			
		||||
You may obtain a copy of the License at
 | 
			
		||||
 | 
			
		||||
    http://www.apache.org/licenses/LICENSE-2.0
 | 
			
		||||
 | 
			
		||||
Unless required by applicable law or agreed to in writing, software
 | 
			
		||||
distributed under the License is distributed on an "AS IS" BASIS,
 | 
			
		||||
WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied.
 | 
			
		||||
See the License for the specific language governing permissions and
 | 
			
		||||
limitations under the License.
 | 
			
		||||
*/
 | 
			
		||||
 | 
			
		||||
package filter
 | 
			
		||||
 | 
			
		||||
import (
 | 
			
		||||
	"reflect"
 | 
			
		||||
	"testing"
 | 
			
		||||
)
 | 
			
		||||
 | 
			
		||||
func TestFilterToString(t *testing.T) {
 | 
			
		||||
	t.Parallel()
 | 
			
		||||
 | 
			
		||||
	for _, tc := range []struct {
 | 
			
		||||
		f    *F
 | 
			
		||||
		want string
 | 
			
		||||
	}{
 | 
			
		||||
		{Regexp("field1", "abc"), `field1 eq abc`},
 | 
			
		||||
		{NotRegexp("field1", "abc"), `field1 ne abc`},
 | 
			
		||||
		{EqualInt("field1", 13), "field1 eq 13"},
 | 
			
		||||
		{NotEqualInt("field1", 13), "field1 ne 13"},
 | 
			
		||||
		{EqualBool("field1", true), "field1 eq true"},
 | 
			
		||||
		{NotEqualBool("field1", true), "field1 ne true"},
 | 
			
		||||
		{Regexp("field1", "abc").AndRegexp("field2", "def"), `(field1 eq abc) (field2 eq def)`},
 | 
			
		||||
		{Regexp("field1", "abc").AndNotEqualInt("field2", 17), `(field1 eq abc) (field2 ne 17)`},
 | 
			
		||||
		{Regexp("field1", "abc").And(EqualInt("field2", 17)), `(field1 eq abc) (field2 eq 17)`},
 | 
			
		||||
	} {
 | 
			
		||||
		if tc.f.String() != tc.want {
 | 
			
		||||
			t.Errorf("filter %#v String() = %q, want %q", tc.f, tc.f.String(), tc.want)
 | 
			
		||||
		}
 | 
			
		||||
	}
 | 
			
		||||
}
 | 
			
		||||
 | 
			
		||||
func TestFilterMatch(t *testing.T) {
 | 
			
		||||
	t.Parallel()
 | 
			
		||||
 | 
			
		||||
	type inner struct {
 | 
			
		||||
		X string
 | 
			
		||||
	}
 | 
			
		||||
	type S struct {
 | 
			
		||||
		S           string
 | 
			
		||||
		I           int
 | 
			
		||||
		B           bool
 | 
			
		||||
		Unhandled   struct{}
 | 
			
		||||
		NestedField *inner
 | 
			
		||||
	}
 | 
			
		||||
 | 
			
		||||
	for _, tc := range []struct {
 | 
			
		||||
		f    *F
 | 
			
		||||
		o    interface{}
 | 
			
		||||
		want bool
 | 
			
		||||
	}{
 | 
			
		||||
		{f: None, o: &S{}, want: true},
 | 
			
		||||
		{f: Regexp("s", "abc"), o: &S{}},
 | 
			
		||||
		{f: EqualInt("i", 10), o: &S{}},
 | 
			
		||||
		{f: EqualBool("b", true), o: &S{}},
 | 
			
		||||
		{f: NotRegexp("s", "abc"), o: &S{}, want: true},
 | 
			
		||||
		{f: NotEqualInt("i", 10), o: &S{}, want: true},
 | 
			
		||||
		{f: NotEqualBool("b", true), o: &S{}, want: true},
 | 
			
		||||
		{f: Regexp("s", "abc").AndEqualBool("b", true), o: &S{}},
 | 
			
		||||
		{f: Regexp("s", "abc"), o: &S{S: "abc"}, want: true},
 | 
			
		||||
		{f: Regexp("s", "a.*"), o: &S{S: "abc"}, want: true},
 | 
			
		||||
		{f: Regexp("s", "a((("), o: &S{S: "abc"}},
 | 
			
		||||
		{f: NotRegexp("s", "abc"), o: &S{S: "abc"}},
 | 
			
		||||
		{f: EqualInt("i", 10), o: &S{I: 11}},
 | 
			
		||||
		{f: EqualInt("i", 10), o: &S{I: 10}, want: true},
 | 
			
		||||
		{f: Regexp("s", "abc").AndEqualBool("b", true), o: &S{S: "abc"}},
 | 
			
		||||
		{f: Regexp("s", "abcd").AndEqualBool("b", true), o: &S{S: "abc"}},
 | 
			
		||||
		{f: Regexp("s", "abc").AndEqualBool("b", true), o: &S{S: "abc", B: true}, want: true},
 | 
			
		||||
		{f: Regexp("s", "abc").And(EqualBool("b", true)), o: &S{S: "abc", B: true}, want: true},
 | 
			
		||||
		{f: Regexp("unhandled", "xyz"), o: &S{}},
 | 
			
		||||
		{f: Regexp("nested_field.x", "xyz"), o: &S{}},
 | 
			
		||||
		{f: Regexp("nested_field.x", "xyz"), o: &S{NestedField: &inner{"xyz"}}, want: true},
 | 
			
		||||
		{f: NotRegexp("nested_field.x", "xyz"), o: &S{NestedField: &inner{"xyz"}}},
 | 
			
		||||
		{f: Regexp("nested_field.y", "xyz"), o: &S{NestedField: &inner{"xyz"}}},
 | 
			
		||||
		{f: Regexp("nested_field", "xyz"), o: &S{NestedField: &inner{"xyz"}}},
 | 
			
		||||
	} {
 | 
			
		||||
		got := tc.f.Match(tc.o)
 | 
			
		||||
		if got != tc.want {
 | 
			
		||||
			t.Errorf("%v: Match(%+v) = %v, want %v", tc.f, tc.o, got, tc.want)
 | 
			
		||||
		}
 | 
			
		||||
	}
 | 
			
		||||
}
 | 
			
		||||
 | 
			
		||||
func TestFilterSnakeToCamelCase(t *testing.T) {
 | 
			
		||||
	t.Parallel()
 | 
			
		||||
 | 
			
		||||
	for _, tc := range []struct {
 | 
			
		||||
		s    string
 | 
			
		||||
		want string
 | 
			
		||||
	}{
 | 
			
		||||
		{"", ""},
 | 
			
		||||
		{"abc", "Abc"},
 | 
			
		||||
		{"_foo", "Foo"},
 | 
			
		||||
		{"a_b_c", "ABC"},
 | 
			
		||||
		{"a_BC_def", "ABCDef"},
 | 
			
		||||
		{"a_Bc_def", "ABcDef"},
 | 
			
		||||
	} {
 | 
			
		||||
		got := snakeToCamelCase(tc.s)
 | 
			
		||||
		if got != tc.want {
 | 
			
		||||
			t.Errorf("snakeToCamelCase(%q) = %q, want %q", tc.s, got, tc.want)
 | 
			
		||||
		}
 | 
			
		||||
	}
 | 
			
		||||
}
 | 
			
		||||
 | 
			
		||||
func TestFilterExtractValue(t *testing.T) {
 | 
			
		||||
	t.Parallel()
 | 
			
		||||
 | 
			
		||||
	type nest2 struct {
 | 
			
		||||
		Y string
 | 
			
		||||
	}
 | 
			
		||||
	type nest struct {
 | 
			
		||||
		X     string
 | 
			
		||||
		Nest2 nest2
 | 
			
		||||
	}
 | 
			
		||||
	st := &struct {
 | 
			
		||||
		S       string
 | 
			
		||||
		I       int
 | 
			
		||||
		F       bool
 | 
			
		||||
		Nest    nest
 | 
			
		||||
		NestPtr *nest
 | 
			
		||||
 | 
			
		||||
		Unhandled float64
 | 
			
		||||
	}{
 | 
			
		||||
		"abc",
 | 
			
		||||
		13,
 | 
			
		||||
		true,
 | 
			
		||||
		nest{"xyz", nest2{"zzz"}},
 | 
			
		||||
		&nest{"yyy", nest2{}},
 | 
			
		||||
		0.0,
 | 
			
		||||
	}
 | 
			
		||||
 | 
			
		||||
	for _, tc := range []struct {
 | 
			
		||||
		path    string
 | 
			
		||||
		o       interface{}
 | 
			
		||||
		want    interface{}
 | 
			
		||||
		wantErr bool
 | 
			
		||||
	}{
 | 
			
		||||
		{path: "s", o: st, want: "abc"},
 | 
			
		||||
		{path: "i", o: st, want: 13},
 | 
			
		||||
		{path: "f", o: st, want: true},
 | 
			
		||||
		{path: "nest.x", o: st, want: "xyz"},
 | 
			
		||||
		{path: "nest_ptr.x", o: st, want: "yyy"},
 | 
			
		||||
		// Error cases.
 | 
			
		||||
		{path: "", o: st, wantErr: true},
 | 
			
		||||
		{path: "no_such_field", o: st, wantErr: true},
 | 
			
		||||
		{path: "s.invalid_type", o: st, wantErr: true},
 | 
			
		||||
		{path: "unhandled", o: st, wantErr: true},
 | 
			
		||||
		{path: "nest.x", o: &struct{ Nest *nest }{}, wantErr: true},
 | 
			
		||||
	} {
 | 
			
		||||
		o, err := extractValue(tc.path, tc.o)
 | 
			
		||||
		gotErr := err != nil
 | 
			
		||||
		if gotErr != tc.wantErr {
 | 
			
		||||
			t.Errorf("extractValue(%v, %+v) = %v, %v; gotErr = %v, tc.wantErr = %v", tc.path, tc.o, o, err, gotErr, tc.wantErr)
 | 
			
		||||
		}
 | 
			
		||||
		if err != nil {
 | 
			
		||||
			continue
 | 
			
		||||
		}
 | 
			
		||||
		if !reflect.DeepEqual(o, tc.want) {
 | 
			
		||||
			t.Errorf("extractValue(%v, %+v) = %v, nil; want %v, nil", tc.path, tc.o, o, tc.want)
 | 
			
		||||
		}
 | 
			
		||||
	}
 | 
			
		||||
}
 | 
			
		||||
@@ -1,29 +0,0 @@
 | 
			
		||||
load("@io_bazel_rules_go//go:def.bzl", "go_binary", "go_library")
 | 
			
		||||
 | 
			
		||||
go_library(
 | 
			
		||||
    name = "go_default_library",
 | 
			
		||||
    srcs = ["main.go"],
 | 
			
		||||
    importpath = "k8s.io/kubernetes/pkg/cloudprovider/providers/gce/cloud/gen",
 | 
			
		||||
    visibility = ["//visibility:private"],
 | 
			
		||||
    deps = ["//pkg/cloudprovider/providers/gce/cloud/meta:go_default_library"],
 | 
			
		||||
)
 | 
			
		||||
 | 
			
		||||
go_binary(
 | 
			
		||||
    name = "gen",
 | 
			
		||||
    embed = [":go_default_library"],
 | 
			
		||||
    visibility = ["//visibility:public"],
 | 
			
		||||
)
 | 
			
		||||
 | 
			
		||||
filegroup(
 | 
			
		||||
    name = "package-srcs",
 | 
			
		||||
    srcs = glob(["**"]),
 | 
			
		||||
    tags = ["automanaged"],
 | 
			
		||||
    visibility = ["//visibility:private"],
 | 
			
		||||
)
 | 
			
		||||
 | 
			
		||||
filegroup(
 | 
			
		||||
    name = "all-srcs",
 | 
			
		||||
    srcs = [":package-srcs"],
 | 
			
		||||
    tags = ["automanaged"],
 | 
			
		||||
    visibility = ["//visibility:public"],
 | 
			
		||||
)
 | 
			
		||||
										
											
												File diff suppressed because it is too large
												Load Diff
											
										
									
								
							
										
											
												File diff suppressed because it is too large
												Load Diff
											
										
									
								
							@@ -1,76 +0,0 @@
 | 
			
		||||
/*
 | 
			
		||||
Copyright 2017 The Kubernetes Authors.
 | 
			
		||||
 | 
			
		||||
Licensed under the Apache License, Version 2.0 (the "License");
 | 
			
		||||
you may not use this file except in compliance with the License.
 | 
			
		||||
You may obtain a copy of the License at
 | 
			
		||||
 | 
			
		||||
    http://www.apache.org/licenses/LICENSE-2.0
 | 
			
		||||
 | 
			
		||||
Unless required by applicable law or agreed to in writing, software
 | 
			
		||||
distributed under the License is distributed on an "AS IS" BASIS,
 | 
			
		||||
WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied.
 | 
			
		||||
See the License for the specific language governing permissions and
 | 
			
		||||
limitations under the License.
 | 
			
		||||
*/
 | 
			
		||||
 | 
			
		||||
package meta
 | 
			
		||||
 | 
			
		||||
import (
 | 
			
		||||
	"testing"
 | 
			
		||||
)
 | 
			
		||||
 | 
			
		||||
func TestKeyType(t *testing.T) {
 | 
			
		||||
	t.Parallel()
 | 
			
		||||
 | 
			
		||||
	for _, tc := range []struct {
 | 
			
		||||
		key  *Key
 | 
			
		||||
		want KeyType
 | 
			
		||||
	}{
 | 
			
		||||
		{GlobalKey("abc"), Global},
 | 
			
		||||
		{ZonalKey("abc", "us-central1-b"), Zonal},
 | 
			
		||||
		{RegionalKey("abc", "us-central1"), Regional},
 | 
			
		||||
	} {
 | 
			
		||||
		if tc.key.Type() != tc.want {
 | 
			
		||||
			t.Errorf("key.Type() == %v, want %v", tc.key.Type(), tc.want)
 | 
			
		||||
		}
 | 
			
		||||
	}
 | 
			
		||||
}
 | 
			
		||||
 | 
			
		||||
func TestKeyString(t *testing.T) {
 | 
			
		||||
	t.Parallel()
 | 
			
		||||
 | 
			
		||||
	for _, k := range []*Key{
 | 
			
		||||
		GlobalKey("abc"),
 | 
			
		||||
		RegionalKey("abc", "us-central1"),
 | 
			
		||||
		ZonalKey("abc", "us-central1-b"),
 | 
			
		||||
	} {
 | 
			
		||||
		if k.String() == "" {
 | 
			
		||||
			t.Errorf(`k.String() = "", want non-empty`)
 | 
			
		||||
		}
 | 
			
		||||
	}
 | 
			
		||||
}
 | 
			
		||||
 | 
			
		||||
func TestKeyValid(t *testing.T) {
 | 
			
		||||
	t.Parallel()
 | 
			
		||||
 | 
			
		||||
	region := "us-central1"
 | 
			
		||||
	zone := "us-central1-b"
 | 
			
		||||
 | 
			
		||||
	for _, tc := range []struct {
 | 
			
		||||
		key  *Key
 | 
			
		||||
		want bool
 | 
			
		||||
	}{
 | 
			
		||||
		{GlobalKey("abc"), true},
 | 
			
		||||
		{RegionalKey("abc", region), true},
 | 
			
		||||
		{ZonalKey("abc", zone), true},
 | 
			
		||||
		{RegionalKey("abc", "/invalid/"), false},
 | 
			
		||||
		{ZonalKey("abc", "/invalid/"), false},
 | 
			
		||||
		{&Key{"abc", zone, region}, false},
 | 
			
		||||
	} {
 | 
			
		||||
		got := tc.key.Valid()
 | 
			
		||||
		if got != tc.want {
 | 
			
		||||
			t.Errorf("key %+v; key.Valid() = %v, want %v", tc.key, got, tc.want)
 | 
			
		||||
		}
 | 
			
		||||
	}
 | 
			
		||||
}
 | 
			
		||||
@@ -1,151 +0,0 @@
 | 
			
		||||
/*
 | 
			
		||||
Copyright 2017 The Kubernetes Authors.
 | 
			
		||||
 | 
			
		||||
Licensed under the Apache License, Version 2.0 (the "License");
 | 
			
		||||
you may not use this file except in compliance with the License.
 | 
			
		||||
You may obtain a copy of the License at
 | 
			
		||||
 | 
			
		||||
    http://www.apache.org/licenses/LICENSE-2.0
 | 
			
		||||
 | 
			
		||||
Unless required by applicable law or agreed to in writing, software
 | 
			
		||||
distributed under the License is distributed on an "AS IS" BASIS,
 | 
			
		||||
WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied.
 | 
			
		||||
See the License for the specific language governing permissions and
 | 
			
		||||
limitations under the License.
 | 
			
		||||
*/
 | 
			
		||||
 | 
			
		||||
package cloud
 | 
			
		||||
 | 
			
		||||
import (
 | 
			
		||||
	"context"
 | 
			
		||||
	"reflect"
 | 
			
		||||
	"testing"
 | 
			
		||||
 | 
			
		||||
	alpha "google.golang.org/api/compute/v0.alpha"
 | 
			
		||||
	beta "google.golang.org/api/compute/v0.beta"
 | 
			
		||||
	ga "google.golang.org/api/compute/v1"
 | 
			
		||||
 | 
			
		||||
	"k8s.io/kubernetes/pkg/cloudprovider/providers/gce/cloud/filter"
 | 
			
		||||
	"k8s.io/kubernetes/pkg/cloudprovider/providers/gce/cloud/meta"
 | 
			
		||||
)
 | 
			
		||||
 | 
			
		||||
func TestMocks(t *testing.T) {
 | 
			
		||||
	t.Parallel()
 | 
			
		||||
 | 
			
		||||
	// This test uses Addresses, but the logic that is generated is the same for
 | 
			
		||||
	// other basic objects.
 | 
			
		||||
	const region = "us-central1"
 | 
			
		||||
 | 
			
		||||
	ctx := context.Background()
 | 
			
		||||
	pr := &SingleProjectRouter{"mock-project"}
 | 
			
		||||
	mock := NewMockGCE(pr)
 | 
			
		||||
 | 
			
		||||
	keyAlpha := meta.RegionalKey("key-alpha", region)
 | 
			
		||||
	keyBeta := meta.RegionalKey("key-beta", region)
 | 
			
		||||
	keyGA := meta.RegionalKey("key-ga", region)
 | 
			
		||||
	key := keyAlpha
 | 
			
		||||
 | 
			
		||||
	// Get not found.
 | 
			
		||||
	if _, err := mock.AlphaAddresses().Get(ctx, key); err == nil {
 | 
			
		||||
		t.Errorf("AlphaAddresses().Get(%v, %v) = _, nil; want error", ctx, key)
 | 
			
		||||
	}
 | 
			
		||||
	if _, err := mock.BetaAddresses().Get(ctx, key); err == nil {
 | 
			
		||||
		t.Errorf("BetaAddresses().Get(%v, %v) = _, nil; want error", ctx, key)
 | 
			
		||||
	}
 | 
			
		||||
	if _, err := mock.Addresses().Get(ctx, key); err == nil {
 | 
			
		||||
		t.Errorf("Addresses().Get(%v, %v) = _, nil; want error", ctx, key)
 | 
			
		||||
	}
 | 
			
		||||
	// Insert.
 | 
			
		||||
	{
 | 
			
		||||
		obj := &alpha.Address{}
 | 
			
		||||
		if err := mock.AlphaAddresses().Insert(ctx, keyAlpha, obj); err != nil {
 | 
			
		||||
			t.Errorf("AlphaAddresses().Insert(%v, %v, %v) = %v; want nil", ctx, key, obj, err)
 | 
			
		||||
		}
 | 
			
		||||
	}
 | 
			
		||||
	{
 | 
			
		||||
		obj := &beta.Address{}
 | 
			
		||||
		if err := mock.BetaAddresses().Insert(ctx, keyBeta, obj); err != nil {
 | 
			
		||||
			t.Errorf("BetaAddresses().Insert(%v, %v, %v) = %v; want nil", ctx, key, obj, err)
 | 
			
		||||
		}
 | 
			
		||||
	}
 | 
			
		||||
	{
 | 
			
		||||
		obj := &ga.Address{}
 | 
			
		||||
		if err := mock.Addresses().Insert(ctx, keyGA, &ga.Address{Name: "ga"}); err != nil {
 | 
			
		||||
			t.Errorf("Addresses().Insert(%v, %v, %v) = %v; want nil", ctx, key, obj, err)
 | 
			
		||||
		}
 | 
			
		||||
	}
 | 
			
		||||
	// Get across versions.
 | 
			
		||||
	if obj, err := mock.AlphaAddresses().Get(ctx, key); err != nil {
 | 
			
		||||
		t.Errorf("AlphaAddresses().Get(%v, %v) = %v, %v; want nil", ctx, key, obj, err)
 | 
			
		||||
	}
 | 
			
		||||
	if obj, err := mock.BetaAddresses().Get(ctx, key); err != nil {
 | 
			
		||||
		t.Errorf("BetaAddresses().Get(%v, %v) = %v, %v; want nil", ctx, key, obj, err)
 | 
			
		||||
	}
 | 
			
		||||
	if obj, err := mock.Addresses().Get(ctx, key); err != nil {
 | 
			
		||||
		t.Errorf("Addresses().Get(%v, %v) = %v, %v; want nil", ctx, key, obj, err)
 | 
			
		||||
	}
 | 
			
		||||
	// List across versions.
 | 
			
		||||
	want := map[string]bool{"key-alpha": true, "key-beta": true, "key-ga": true}
 | 
			
		||||
	{
 | 
			
		||||
		objs, err := mock.AlphaAddresses().List(ctx, region, filter.None)
 | 
			
		||||
		if err != nil {
 | 
			
		||||
			t.Errorf("AlphaAddresses().List(%v, %v, %v) = %v, %v; want _, nil", ctx, region, filter.None, objs, err)
 | 
			
		||||
		} else {
 | 
			
		||||
			got := map[string]bool{}
 | 
			
		||||
			for _, obj := range objs {
 | 
			
		||||
				got[obj.Name] = true
 | 
			
		||||
			}
 | 
			
		||||
			if !reflect.DeepEqual(got, want) {
 | 
			
		||||
				t.Errorf("AlphaAddresses().List(); got %+v, want %+v", got, want)
 | 
			
		||||
			}
 | 
			
		||||
		}
 | 
			
		||||
	}
 | 
			
		||||
	{
 | 
			
		||||
		objs, err := mock.BetaAddresses().List(ctx, region, filter.None)
 | 
			
		||||
		if err != nil {
 | 
			
		||||
			t.Errorf("BetaAddresses().List(%v, %v, %v) = %v, %v; want _, nil", ctx, region, filter.None, objs, err)
 | 
			
		||||
		} else {
 | 
			
		||||
			got := map[string]bool{}
 | 
			
		||||
			for _, obj := range objs {
 | 
			
		||||
				got[obj.Name] = true
 | 
			
		||||
			}
 | 
			
		||||
			if !reflect.DeepEqual(got, want) {
 | 
			
		||||
				t.Errorf("AlphaAddresses().List(); got %+v, want %+v", got, want)
 | 
			
		||||
			}
 | 
			
		||||
		}
 | 
			
		||||
	}
 | 
			
		||||
	{
 | 
			
		||||
		objs, err := mock.Addresses().List(ctx, region, filter.None)
 | 
			
		||||
		if err != nil {
 | 
			
		||||
			t.Errorf("Addresses().List(%v, %v, %v) = %v, %v; want _, nil", ctx, region, filter.None, objs, err)
 | 
			
		||||
		} else {
 | 
			
		||||
			got := map[string]bool{}
 | 
			
		||||
			for _, obj := range objs {
 | 
			
		||||
				got[obj.Name] = true
 | 
			
		||||
			}
 | 
			
		||||
			if !reflect.DeepEqual(got, want) {
 | 
			
		||||
				t.Errorf("AlphaAddresses().List(); got %+v, want %+v", got, want)
 | 
			
		||||
			}
 | 
			
		||||
		}
 | 
			
		||||
	}
 | 
			
		||||
	// Delete across versions.
 | 
			
		||||
	if err := mock.AlphaAddresses().Delete(ctx, keyAlpha); err != nil {
 | 
			
		||||
		t.Errorf("AlphaAddresses().Delete(%v, %v) = %v; want nil", ctx, key, err)
 | 
			
		||||
	}
 | 
			
		||||
	if err := mock.BetaAddresses().Delete(ctx, keyBeta); err != nil {
 | 
			
		||||
		t.Errorf("BetaAddresses().Delete(%v, %v) = %v; want nil", ctx, key, err)
 | 
			
		||||
	}
 | 
			
		||||
	if err := mock.Addresses().Delete(ctx, keyGA); err != nil {
 | 
			
		||||
		t.Errorf("Addresses().Delete(%v, %v) = %v; want nil", ctx, key, err)
 | 
			
		||||
	}
 | 
			
		||||
	// Delete not found.
 | 
			
		||||
	if err := mock.AlphaAddresses().Delete(ctx, keyAlpha); err == nil {
 | 
			
		||||
		t.Errorf("AlphaAddresses().Delete(%v, %v) = nil; want error", ctx, key)
 | 
			
		||||
	}
 | 
			
		||||
	if err := mock.BetaAddresses().Delete(ctx, keyBeta); err == nil {
 | 
			
		||||
		t.Errorf("BetaAddresses().Delete(%v, %v) = nil; want error", ctx, key)
 | 
			
		||||
	}
 | 
			
		||||
	if err := mock.Addresses().Delete(ctx, keyGA); err == nil {
 | 
			
		||||
		t.Errorf("Addresses().Delete(%v, %v) = nil; want error", ctx, key)
 | 
			
		||||
	}
 | 
			
		||||
}
 | 
			
		||||
@@ -1,80 +0,0 @@
 | 
			
		||||
/*
 | 
			
		||||
Copyright 2018 The Kubernetes Authors.
 | 
			
		||||
 | 
			
		||||
Licensed under the Apache License, Version 2.0 (the "License");
 | 
			
		||||
you may not use this file except in compliance with the License.
 | 
			
		||||
You may obtain a copy of the License at
 | 
			
		||||
 | 
			
		||||
    http://www.apache.org/licenses/LICENSE-2.0
 | 
			
		||||
 | 
			
		||||
Unless required by applicable law or agreed to in writing, software
 | 
			
		||||
distributed under the License is distributed on an "AS IS" BASIS,
 | 
			
		||||
WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied.
 | 
			
		||||
See the License for the specific language governing permissions and
 | 
			
		||||
limitations under the License.
 | 
			
		||||
*/
 | 
			
		||||
 | 
			
		||||
package cloud
 | 
			
		||||
 | 
			
		||||
import (
 | 
			
		||||
	"context"
 | 
			
		||||
	"testing"
 | 
			
		||||
	"time"
 | 
			
		||||
)
 | 
			
		||||
 | 
			
		||||
type FakeAcceptor struct{ accept func() }
 | 
			
		||||
 | 
			
		||||
func (f *FakeAcceptor) Accept() {
 | 
			
		||||
	f.accept()
 | 
			
		||||
}
 | 
			
		||||
 | 
			
		||||
func TestAcceptRateLimiter(t *testing.T) {
 | 
			
		||||
	fa := &FakeAcceptor{accept: func() {}}
 | 
			
		||||
	arl := &AcceptRateLimiter{fa}
 | 
			
		||||
	err := arl.Accept(context.Background(), nil)
 | 
			
		||||
	if err != nil {
 | 
			
		||||
		t.Errorf("AcceptRateLimiter.Accept() = %v, want nil", err)
 | 
			
		||||
	}
 | 
			
		||||
 | 
			
		||||
	// Use context that has been cancelled and expect a context error returned.
 | 
			
		||||
	ctxCancelled, cancelled := context.WithCancel(context.Background())
 | 
			
		||||
	cancelled()
 | 
			
		||||
	// Verify context is cancelled by now.
 | 
			
		||||
	<-ctxCancelled.Done()
 | 
			
		||||
 | 
			
		||||
	fa.accept = func() { time.Sleep(1 * time.Second) }
 | 
			
		||||
	err = arl.Accept(ctxCancelled, nil)
 | 
			
		||||
	if err != ctxCancelled.Err() {
 | 
			
		||||
		t.Errorf("AcceptRateLimiter.Accept() = %v, want %v", err, ctxCancelled.Err())
 | 
			
		||||
	}
 | 
			
		||||
}
 | 
			
		||||
 | 
			
		||||
func TestMinimumRateLimiter(t *testing.T) {
 | 
			
		||||
	fa := &FakeAcceptor{accept: func() {}}
 | 
			
		||||
	arl := &AcceptRateLimiter{fa}
 | 
			
		||||
	var called bool
 | 
			
		||||
	fa.accept = func() { called = true }
 | 
			
		||||
	m := &MinimumRateLimiter{RateLimiter: arl, Minimum: 10 * time.Millisecond}
 | 
			
		||||
 | 
			
		||||
	err := m.Accept(context.Background(), nil)
 | 
			
		||||
	if err != nil {
 | 
			
		||||
		t.Errorf("MinimumRateLimiter.Accept = %v, want nil", err)
 | 
			
		||||
	}
 | 
			
		||||
	if !called {
 | 
			
		||||
		t.Errorf("`called` = false, want true")
 | 
			
		||||
	}
 | 
			
		||||
 | 
			
		||||
	// Use context that has been cancelled and expect a context error returned.
 | 
			
		||||
	ctxCancelled, cancelled := context.WithCancel(context.Background())
 | 
			
		||||
	cancelled()
 | 
			
		||||
	// Verify context is cancelled by now.
 | 
			
		||||
	<-ctxCancelled.Done()
 | 
			
		||||
	called = false
 | 
			
		||||
	err = m.Accept(ctxCancelled, nil)
 | 
			
		||||
	if err != ctxCancelled.Err() {
 | 
			
		||||
		t.Errorf("AcceptRateLimiter.Accept() = %v, want %v", err, ctxCancelled.Err())
 | 
			
		||||
	}
 | 
			
		||||
	if called {
 | 
			
		||||
		t.Errorf("`called` = true, want false")
 | 
			
		||||
	}
 | 
			
		||||
}
 | 
			
		||||
@@ -1,84 +0,0 @@
 | 
			
		||||
/*
 | 
			
		||||
Copyright 2018 The Kubernetes Authors.
 | 
			
		||||
 | 
			
		||||
Licensed under the Apache License, Version 2.0 (the "License");
 | 
			
		||||
you may not use this file except in compliance with the License.
 | 
			
		||||
You may obtain a copy of the License at
 | 
			
		||||
 | 
			
		||||
    http://www.apache.org/licenses/LICENSE-2.0
 | 
			
		||||
 | 
			
		||||
Unless required by applicable law or agreed to in writing, software
 | 
			
		||||
distributed under the License is distributed on an "AS IS" BASIS,
 | 
			
		||||
WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied.
 | 
			
		||||
See the License for the specific language governing permissions and
 | 
			
		||||
limitations under the License.
 | 
			
		||||
*/
 | 
			
		||||
 | 
			
		||||
package cloud
 | 
			
		||||
 | 
			
		||||
import (
 | 
			
		||||
	"context"
 | 
			
		||||
	"fmt"
 | 
			
		||||
	"testing"
 | 
			
		||||
)
 | 
			
		||||
 | 
			
		||||
func TestPollOperation(t *testing.T) {
 | 
			
		||||
	const totalAttempts = 10
 | 
			
		||||
	var attempts int
 | 
			
		||||
	fo := &fakeOperation{isDoneFunc: func(ctx context.Context) (bool, error) {
 | 
			
		||||
		attempts++
 | 
			
		||||
		if attempts < totalAttempts {
 | 
			
		||||
			return false, nil
 | 
			
		||||
		}
 | 
			
		||||
		return true, nil
 | 
			
		||||
	}}
 | 
			
		||||
	s := Service{RateLimiter: &NopRateLimiter{}}
 | 
			
		||||
	// Check that pollOperation will retry the operation multiple times.
 | 
			
		||||
	err := s.pollOperation(context.Background(), fo)
 | 
			
		||||
	if err != nil {
 | 
			
		||||
		t.Errorf("pollOperation() = %v, want nil", err)
 | 
			
		||||
	}
 | 
			
		||||
	if attempts != totalAttempts {
 | 
			
		||||
		t.Errorf("`attempts` = %d, want %d", attempts, totalAttempts)
 | 
			
		||||
	}
 | 
			
		||||
 | 
			
		||||
	// Check that the operation's error is returned.
 | 
			
		||||
	fo.err = fmt.Errorf("test operation failed")
 | 
			
		||||
	err = s.pollOperation(context.Background(), fo)
 | 
			
		||||
	if err != fo.err {
 | 
			
		||||
		t.Errorf("pollOperation() = %v, want %v", err, fo.err)
 | 
			
		||||
	}
 | 
			
		||||
	fo.err = nil
 | 
			
		||||
 | 
			
		||||
	fo.isDoneFunc = func(ctx context.Context) (bool, error) {
 | 
			
		||||
		return false, nil
 | 
			
		||||
	}
 | 
			
		||||
	// Use context that has been cancelled and expect a context error returned.
 | 
			
		||||
	ctxCancelled, cancelled := context.WithCancel(context.Background())
 | 
			
		||||
	cancelled()
 | 
			
		||||
	// Verify context is cancelled by now.
 | 
			
		||||
	<-ctxCancelled.Done()
 | 
			
		||||
	// Check that pollOperation returns because the context is cancelled.
 | 
			
		||||
	err = s.pollOperation(ctxCancelled, fo)
 | 
			
		||||
	if err == nil {
 | 
			
		||||
		t.Errorf("pollOperation() = nil, want: %v", ctxCancelled.Err())
 | 
			
		||||
	}
 | 
			
		||||
}
 | 
			
		||||
 | 
			
		||||
type fakeOperation struct {
 | 
			
		||||
	isDoneFunc func(ctx context.Context) (bool, error)
 | 
			
		||||
	err        error
 | 
			
		||||
	rateKey    *RateLimitKey
 | 
			
		||||
}
 | 
			
		||||
 | 
			
		||||
func (f *fakeOperation) isDone(ctx context.Context) (bool, error) {
 | 
			
		||||
	return f.isDoneFunc(ctx)
 | 
			
		||||
}
 | 
			
		||||
 | 
			
		||||
func (f *fakeOperation) error() error {
 | 
			
		||||
	return f.err
 | 
			
		||||
}
 | 
			
		||||
 | 
			
		||||
func (f *fakeOperation) rateLimitKey() *RateLimitKey {
 | 
			
		||||
	return f.rateKey
 | 
			
		||||
}
 | 
			
		||||
@@ -1,291 +0,0 @@
 | 
			
		||||
/*
 | 
			
		||||
Copyright 2017 The Kubernetes Authors.
 | 
			
		||||
 | 
			
		||||
Licensed under the Apache License, Version 2.0 (the "License");
 | 
			
		||||
you may not use this file except in compliance with the License.
 | 
			
		||||
You may obtain a copy of the License at
 | 
			
		||||
 | 
			
		||||
    http://www.apache.org/licenses/LICENSE-2.0
 | 
			
		||||
 | 
			
		||||
Unless required by applicable law or agreed to in writing, software
 | 
			
		||||
distributed under the License is distributed on an "AS IS" BASIS,
 | 
			
		||||
WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied.
 | 
			
		||||
See the License for the specific language governing permissions and
 | 
			
		||||
limitations under the License.
 | 
			
		||||
*/
 | 
			
		||||
 | 
			
		||||
package cloud
 | 
			
		||||
 | 
			
		||||
import (
 | 
			
		||||
	"errors"
 | 
			
		||||
	"testing"
 | 
			
		||||
 | 
			
		||||
	"k8s.io/kubernetes/pkg/cloudprovider/providers/gce/cloud/meta"
 | 
			
		||||
)
 | 
			
		||||
 | 
			
		||||
func TestEqualResourceID(t *testing.T) {
 | 
			
		||||
	t.Parallel()
 | 
			
		||||
 | 
			
		||||
	for _, tc := range []struct {
 | 
			
		||||
		a *ResourceID
 | 
			
		||||
		b *ResourceID
 | 
			
		||||
	}{
 | 
			
		||||
		{
 | 
			
		||||
			a: &ResourceID{"some-gce-project", "projects", nil},
 | 
			
		||||
			b: &ResourceID{"some-gce-project", "projects", nil},
 | 
			
		||||
		},
 | 
			
		||||
		{
 | 
			
		||||
			a: &ResourceID{"", "networks", meta.GlobalKey("my-net")},
 | 
			
		||||
			b: &ResourceID{"", "networks", meta.GlobalKey("my-net")},
 | 
			
		||||
		},
 | 
			
		||||
		{
 | 
			
		||||
			a: &ResourceID{"some-gce-project", "projects", meta.GlobalKey("us-central1")},
 | 
			
		||||
			b: &ResourceID{"some-gce-project", "projects", meta.GlobalKey("us-central1")},
 | 
			
		||||
		},
 | 
			
		||||
	} {
 | 
			
		||||
		if !tc.a.Equal(tc.b) {
 | 
			
		||||
			t.Errorf("%v.Equal(%v) = false, want true", tc.a, tc.b)
 | 
			
		||||
		}
 | 
			
		||||
	}
 | 
			
		||||
 | 
			
		||||
	for _, tc := range []struct {
 | 
			
		||||
		a *ResourceID
 | 
			
		||||
		b *ResourceID
 | 
			
		||||
	}{
 | 
			
		||||
		{
 | 
			
		||||
			a: &ResourceID{"some-gce-project", "projects", nil},
 | 
			
		||||
			b: &ResourceID{"some-other-project", "projects", nil},
 | 
			
		||||
		},
 | 
			
		||||
		{
 | 
			
		||||
			a: &ResourceID{"some-gce-project", "projects", nil},
 | 
			
		||||
			b: &ResourceID{"some-gce-project", "projects", meta.GlobalKey("us-central1")},
 | 
			
		||||
		},
 | 
			
		||||
		{
 | 
			
		||||
			a: &ResourceID{"some-gce-project", "networks", meta.GlobalKey("us-central1")},
 | 
			
		||||
			b: &ResourceID{"some-gce-project", "projects", meta.GlobalKey("us-central1")},
 | 
			
		||||
		},
 | 
			
		||||
	} {
 | 
			
		||||
		if tc.a.Equal(tc.b) {
 | 
			
		||||
			t.Errorf("%v.Equal(%v) = true, want false", tc.a, tc.b)
 | 
			
		||||
		}
 | 
			
		||||
	}
 | 
			
		||||
}
 | 
			
		||||
 | 
			
		||||
func TestParseResourceURL(t *testing.T) {
 | 
			
		||||
	t.Parallel()
 | 
			
		||||
 | 
			
		||||
	for _, tc := range []struct {
 | 
			
		||||
		in string
 | 
			
		||||
		r  *ResourceID
 | 
			
		||||
	}{
 | 
			
		||||
		{
 | 
			
		||||
			"https://www.googleapis.com/compute/v1/projects/some-gce-project",
 | 
			
		||||
			&ResourceID{"some-gce-project", "projects", nil},
 | 
			
		||||
		},
 | 
			
		||||
		{
 | 
			
		||||
			"https://www.googleapis.com/compute/v1/projects/some-gce-project/regions/us-central1",
 | 
			
		||||
			&ResourceID{"some-gce-project", "regions", meta.GlobalKey("us-central1")},
 | 
			
		||||
		},
 | 
			
		||||
		{
 | 
			
		||||
			"https://www.googleapis.com/compute/v1/projects/some-gce-project/zones/us-central1-b",
 | 
			
		||||
			&ResourceID{"some-gce-project", "zones", meta.GlobalKey("us-central1-b")},
 | 
			
		||||
		},
 | 
			
		||||
		{
 | 
			
		||||
			"https://www.googleapis.com/compute/v1/projects/some-gce-project/global/operations/operation-1513289952196-56054460af5a0-b1dae0c3-9bbf9dbf",
 | 
			
		||||
			&ResourceID{"some-gce-project", "operations", meta.GlobalKey("operation-1513289952196-56054460af5a0-b1dae0c3-9bbf9dbf")},
 | 
			
		||||
		},
 | 
			
		||||
		{
 | 
			
		||||
			"https://www.googleapis.com/compute/alpha/projects/some-gce-project/regions/us-central1/addresses/my-address",
 | 
			
		||||
			&ResourceID{"some-gce-project", "addresses", meta.RegionalKey("my-address", "us-central1")},
 | 
			
		||||
		},
 | 
			
		||||
		{
 | 
			
		||||
			"https://www.googleapis.com/compute/v1/projects/some-gce-project/zones/us-central1-c/instances/instance-1",
 | 
			
		||||
			&ResourceID{"some-gce-project", "instances", meta.ZonalKey("instance-1", "us-central1-c")},
 | 
			
		||||
		},
 | 
			
		||||
		{
 | 
			
		||||
			"http://localhost:3990/compute/beta/projects/some-gce-project/global/operations/operation-1513289952196-56054460af5a0-b1dae0c3-9bbf9dbf",
 | 
			
		||||
			&ResourceID{"some-gce-project", "operations", meta.GlobalKey("operation-1513289952196-56054460af5a0-b1dae0c3-9bbf9dbf")},
 | 
			
		||||
		},
 | 
			
		||||
		{
 | 
			
		||||
			"http://localhost:3990/compute/alpha/projects/some-gce-project/regions/dev-central1/addresses/my-address",
 | 
			
		||||
			&ResourceID{"some-gce-project", "addresses", meta.RegionalKey("my-address", "dev-central1")},
 | 
			
		||||
		},
 | 
			
		||||
		{
 | 
			
		||||
			"http://localhost:3990/compute/v1/projects/some-gce-project/zones/dev-central1-std/instances/instance-1",
 | 
			
		||||
			&ResourceID{"some-gce-project", "instances", meta.ZonalKey("instance-1", "dev-central1-std")},
 | 
			
		||||
		},
 | 
			
		||||
		{
 | 
			
		||||
			"projects/some-gce-project",
 | 
			
		||||
			&ResourceID{"some-gce-project", "projects", nil},
 | 
			
		||||
		},
 | 
			
		||||
		{
 | 
			
		||||
			"projects/some-gce-project/regions/us-central1",
 | 
			
		||||
			&ResourceID{"some-gce-project", "regions", meta.GlobalKey("us-central1")},
 | 
			
		||||
		},
 | 
			
		||||
		{
 | 
			
		||||
			"projects/some-gce-project/zones/us-central1-b",
 | 
			
		||||
			&ResourceID{"some-gce-project", "zones", meta.GlobalKey("us-central1-b")},
 | 
			
		||||
		},
 | 
			
		||||
		{
 | 
			
		||||
			"projects/some-gce-project/global/operations/operation-1513289952196-56054460af5a0-b1dae0c3-9bbf9dbf",
 | 
			
		||||
			&ResourceID{"some-gce-project", "operations", meta.GlobalKey("operation-1513289952196-56054460af5a0-b1dae0c3-9bbf9dbf")},
 | 
			
		||||
		},
 | 
			
		||||
		{
 | 
			
		||||
			"projects/some-gce-project/regions/us-central1/addresses/my-address",
 | 
			
		||||
			&ResourceID{"some-gce-project", "addresses", meta.RegionalKey("my-address", "us-central1")},
 | 
			
		||||
		},
 | 
			
		||||
		{
 | 
			
		||||
			"projects/some-gce-project/zones/us-central1-c/instances/instance-1",
 | 
			
		||||
			&ResourceID{"some-gce-project", "instances", meta.ZonalKey("instance-1", "us-central1-c")},
 | 
			
		||||
		},
 | 
			
		||||
		{
 | 
			
		||||
			"global/networks/my-network",
 | 
			
		||||
			&ResourceID{"", "networks", meta.GlobalKey("my-network")},
 | 
			
		||||
		},
 | 
			
		||||
		{
 | 
			
		||||
			"regions/us-central1/subnetworks/my-subnet",
 | 
			
		||||
			&ResourceID{"", "subnetworks", meta.RegionalKey("my-subnet", "us-central1")},
 | 
			
		||||
		},
 | 
			
		||||
		{
 | 
			
		||||
			"zones/us-central1-c/instances/instance-1",
 | 
			
		||||
			&ResourceID{"", "instances", meta.ZonalKey("instance-1", "us-central1-c")},
 | 
			
		||||
		},
 | 
			
		||||
	} {
 | 
			
		||||
		r, err := ParseResourceURL(tc.in)
 | 
			
		||||
		if err != nil {
 | 
			
		||||
			t.Errorf("ParseResourceURL(%q) = %+v, %v; want _, nil", tc.in, r, err)
 | 
			
		||||
			continue
 | 
			
		||||
		}
 | 
			
		||||
		if !r.Equal(tc.r) {
 | 
			
		||||
			t.Errorf("ParseResourceURL(%q) = %+v, nil; want %+v, nil", tc.in, r, tc.r)
 | 
			
		||||
		}
 | 
			
		||||
	}
 | 
			
		||||
	// Malformed URLs.
 | 
			
		||||
	for _, tc := range []string{
 | 
			
		||||
		"",
 | 
			
		||||
		"/",
 | 
			
		||||
		"/a",
 | 
			
		||||
		"/a/b",
 | 
			
		||||
		"/a/b/c",
 | 
			
		||||
		"/a/b/c/d",
 | 
			
		||||
		"/a/b/c/d/e",
 | 
			
		||||
		"/a/b/c/d/e/f",
 | 
			
		||||
		"https://www.googleapis.com/compute/v1/projects/some-gce-project/global",
 | 
			
		||||
		"projects/some-gce-project/global",
 | 
			
		||||
		"projects/some-gce-project/global/foo",
 | 
			
		||||
		"projects/some-gce-project/global/foo/bar/baz",
 | 
			
		||||
		"projects/some-gce-project/regions/us-central1/res",
 | 
			
		||||
		"projects/some-gce-project/zones/us-central1-c/res",
 | 
			
		||||
		"projects/some-gce-project/zones/us-central1-c/res/name/extra",
 | 
			
		||||
	} {
 | 
			
		||||
		r, err := ParseResourceURL(tc)
 | 
			
		||||
		if err == nil {
 | 
			
		||||
			t.Errorf("ParseResourceURL(%q) = %+v, %v, want _, error", tc, r, err)
 | 
			
		||||
		}
 | 
			
		||||
	}
 | 
			
		||||
}
 | 
			
		||||
 | 
			
		||||
type A struct {
 | 
			
		||||
	A, B, C string
 | 
			
		||||
}
 | 
			
		||||
 | 
			
		||||
type B struct {
 | 
			
		||||
	A, B, D string
 | 
			
		||||
}
 | 
			
		||||
 | 
			
		||||
type E struct{}
 | 
			
		||||
 | 
			
		||||
func (*E) MarshalJSON() ([]byte, error) {
 | 
			
		||||
	return nil, errors.New("injected error")
 | 
			
		||||
}
 | 
			
		||||
 | 
			
		||||
func TestCopyVisJSON(t *testing.T) {
 | 
			
		||||
	t.Parallel()
 | 
			
		||||
 | 
			
		||||
	var b B
 | 
			
		||||
	srcA := &A{"aa", "bb", "cc"}
 | 
			
		||||
	err := copyViaJSON(&b, srcA)
 | 
			
		||||
	if err != nil {
 | 
			
		||||
		t.Errorf(`copyViaJSON(&b, %+v) = %v, want nil`, srcA, err)
 | 
			
		||||
	} else {
 | 
			
		||||
		expectedB := B{"aa", "bb", ""}
 | 
			
		||||
		if b != expectedB {
 | 
			
		||||
			t.Errorf("b == %+v, want %+v", b, expectedB)
 | 
			
		||||
		}
 | 
			
		||||
	}
 | 
			
		||||
 | 
			
		||||
	var a A
 | 
			
		||||
	srcB := &B{"aaa", "bbb", "ccc"}
 | 
			
		||||
	err = copyViaJSON(&a, srcB)
 | 
			
		||||
	if err != nil {
 | 
			
		||||
		t.Errorf(`copyViaJSON(&a, %+v) = %v, want nil`, srcB, err)
 | 
			
		||||
	} else {
 | 
			
		||||
		expectedA := A{"aaa", "bbb", ""}
 | 
			
		||||
		if a != expectedA {
 | 
			
		||||
			t.Errorf("a == %+v, want %+v", a, expectedA)
 | 
			
		||||
		}
 | 
			
		||||
	}
 | 
			
		||||
 | 
			
		||||
	if err := copyViaJSON(&a, &E{}); err == nil {
 | 
			
		||||
		t.Errorf("copyViaJSON(&a, &E{}) = nil, want error")
 | 
			
		||||
	}
 | 
			
		||||
}
 | 
			
		||||
 | 
			
		||||
func TestSelfLink(t *testing.T) {
 | 
			
		||||
	t.Parallel()
 | 
			
		||||
 | 
			
		||||
	for _, tc := range []struct {
 | 
			
		||||
		ver      meta.Version
 | 
			
		||||
		project  string
 | 
			
		||||
		resource string
 | 
			
		||||
		key      *meta.Key
 | 
			
		||||
		want     string
 | 
			
		||||
	}{
 | 
			
		||||
		{
 | 
			
		||||
			meta.VersionAlpha,
 | 
			
		||||
			"proj1",
 | 
			
		||||
			"addresses",
 | 
			
		||||
			meta.RegionalKey("key1", "us-central1"),
 | 
			
		||||
			"https://www.googleapis.com/compute/alpha/projects/proj1/regions/us-central1/addresses/key1",
 | 
			
		||||
		},
 | 
			
		||||
		{
 | 
			
		||||
			meta.VersionBeta,
 | 
			
		||||
			"proj3",
 | 
			
		||||
			"disks",
 | 
			
		||||
			meta.ZonalKey("key2", "us-central1-b"),
 | 
			
		||||
			"https://www.googleapis.com/compute/beta/projects/proj3/zones/us-central1-b/disks/key2",
 | 
			
		||||
		},
 | 
			
		||||
		{
 | 
			
		||||
			meta.VersionGA,
 | 
			
		||||
			"proj4",
 | 
			
		||||
			"urlMaps",
 | 
			
		||||
			meta.GlobalKey("key3"),
 | 
			
		||||
			"https://www.googleapis.com/compute/v1/projects/proj4/global/urlMaps/key3",
 | 
			
		||||
		},
 | 
			
		||||
		{
 | 
			
		||||
			meta.VersionGA,
 | 
			
		||||
			"proj4",
 | 
			
		||||
			"projects",
 | 
			
		||||
			nil,
 | 
			
		||||
			"https://www.googleapis.com/compute/v1/projects/proj4",
 | 
			
		||||
		},
 | 
			
		||||
		{
 | 
			
		||||
			meta.VersionGA,
 | 
			
		||||
			"proj4",
 | 
			
		||||
			"regions",
 | 
			
		||||
			meta.GlobalKey("us-central1"),
 | 
			
		||||
			"https://www.googleapis.com/compute/v1/projects/proj4/regions/us-central1",
 | 
			
		||||
		},
 | 
			
		||||
		{
 | 
			
		||||
			meta.VersionGA,
 | 
			
		||||
			"proj4",
 | 
			
		||||
			"zones",
 | 
			
		||||
			meta.GlobalKey("us-central1-a"),
 | 
			
		||||
			"https://www.googleapis.com/compute/v1/projects/proj4/zones/us-central1-a",
 | 
			
		||||
		},
 | 
			
		||||
	} {
 | 
			
		||||
		if link := SelfLink(tc.ver, tc.project, tc.resource, tc.key); link != tc.want {
 | 
			
		||||
			t.Errorf("SelfLink(%v, %q, %q, %v) = %v, want %q", tc.ver, tc.project, tc.resource, tc.key, link, tc.want)
 | 
			
		||||
		}
 | 
			
		||||
	}
 | 
			
		||||
}
 | 
			
		||||
@@ -49,8 +49,8 @@ import (
 | 
			
		||||
	"k8s.io/client-go/tools/record"
 | 
			
		||||
	"k8s.io/client-go/util/flowcontrol"
 | 
			
		||||
 | 
			
		||||
	"github.com/GoogleCloudPlatform/k8s-cloud-provider/pkg/cloud"
 | 
			
		||||
	cloudprovider "k8s.io/cloud-provider"
 | 
			
		||||
	"k8s.io/kubernetes/pkg/cloudprovider/providers/gce/cloud"
 | 
			
		||||
	"k8s.io/kubernetes/pkg/controller"
 | 
			
		||||
	kubeletapis "k8s.io/kubernetes/pkg/kubelet/apis"
 | 
			
		||||
	"k8s.io/kubernetes/pkg/version"
 | 
			
		||||
 
 | 
			
		||||
@@ -22,8 +22,8 @@ import (
 | 
			
		||||
 | 
			
		||||
	compute "google.golang.org/api/compute/v1"
 | 
			
		||||
 | 
			
		||||
	"github.com/GoogleCloudPlatform/k8s-cloud-provider/pkg/cloud"
 | 
			
		||||
	"k8s.io/klog"
 | 
			
		||||
	"k8s.io/kubernetes/pkg/cloudprovider/providers/gce/cloud"
 | 
			
		||||
)
 | 
			
		||||
 | 
			
		||||
type addressManager struct {
 | 
			
		||||
 
 | 
			
		||||
@@ -19,10 +19,10 @@ package gce
 | 
			
		||||
import (
 | 
			
		||||
	"testing"
 | 
			
		||||
 | 
			
		||||
	"github.com/GoogleCloudPlatform/k8s-cloud-provider/pkg/cloud"
 | 
			
		||||
	"github.com/stretchr/testify/assert"
 | 
			
		||||
	"github.com/stretchr/testify/require"
 | 
			
		||||
	compute "google.golang.org/api/compute/v1"
 | 
			
		||||
	"k8s.io/kubernetes/pkg/cloudprovider/providers/gce/cloud"
 | 
			
		||||
)
 | 
			
		||||
 | 
			
		||||
const testSvcName = "my-service"
 | 
			
		||||
 
 | 
			
		||||
@@ -25,9 +25,9 @@ import (
 | 
			
		||||
	computebeta "google.golang.org/api/compute/v0.beta"
 | 
			
		||||
	compute "google.golang.org/api/compute/v1"
 | 
			
		||||
 | 
			
		||||
	"k8s.io/kubernetes/pkg/cloudprovider/providers/gce/cloud"
 | 
			
		||||
	"k8s.io/kubernetes/pkg/cloudprovider/providers/gce/cloud/filter"
 | 
			
		||||
	"k8s.io/kubernetes/pkg/cloudprovider/providers/gce/cloud/meta"
 | 
			
		||||
	"github.com/GoogleCloudPlatform/k8s-cloud-provider/pkg/cloud"
 | 
			
		||||
	"github.com/GoogleCloudPlatform/k8s-cloud-provider/pkg/cloud/filter"
 | 
			
		||||
	"github.com/GoogleCloudPlatform/k8s-cloud-provider/pkg/cloud/meta"
 | 
			
		||||
)
 | 
			
		||||
 | 
			
		||||
func newAddressMetricContext(request, region string) *metricContext {
 | 
			
		||||
 
 | 
			
		||||
@@ -21,8 +21,8 @@ import (
 | 
			
		||||
 | 
			
		||||
	"k8s.io/klog"
 | 
			
		||||
 | 
			
		||||
	"github.com/GoogleCloudPlatform/k8s-cloud-provider/pkg/cloud"
 | 
			
		||||
	"k8s.io/api/core/v1"
 | 
			
		||||
	"k8s.io/kubernetes/pkg/cloudprovider/providers/gce/cloud"
 | 
			
		||||
)
 | 
			
		||||
 | 
			
		||||
// LoadBalancerType defines a specific type for holding load balancer types (eg. Internal)
 | 
			
		||||
 
 | 
			
		||||
@@ -19,9 +19,9 @@ package gce
 | 
			
		||||
import (
 | 
			
		||||
	"testing"
 | 
			
		||||
 | 
			
		||||
	"github.com/GoogleCloudPlatform/k8s-cloud-provider/pkg/cloud"
 | 
			
		||||
	"k8s.io/api/core/v1"
 | 
			
		||||
	metav1 "k8s.io/apimachinery/pkg/apis/meta/v1"
 | 
			
		||||
	"k8s.io/kubernetes/pkg/cloudprovider/providers/gce/cloud"
 | 
			
		||||
 | 
			
		||||
	"github.com/stretchr/testify/assert"
 | 
			
		||||
)
 | 
			
		||||
 
 | 
			
		||||
@@ -21,9 +21,9 @@ import (
 | 
			
		||||
	computebeta "google.golang.org/api/compute/v0.beta"
 | 
			
		||||
	compute "google.golang.org/api/compute/v1"
 | 
			
		||||
 | 
			
		||||
	"k8s.io/kubernetes/pkg/cloudprovider/providers/gce/cloud"
 | 
			
		||||
	"k8s.io/kubernetes/pkg/cloudprovider/providers/gce/cloud/filter"
 | 
			
		||||
	"k8s.io/kubernetes/pkg/cloudprovider/providers/gce/cloud/meta"
 | 
			
		||||
	"github.com/GoogleCloudPlatform/k8s-cloud-provider/pkg/cloud"
 | 
			
		||||
	"github.com/GoogleCloudPlatform/k8s-cloud-provider/pkg/cloud/filter"
 | 
			
		||||
	"github.com/GoogleCloudPlatform/k8s-cloud-provider/pkg/cloud/meta"
 | 
			
		||||
)
 | 
			
		||||
 | 
			
		||||
func newBackendServiceMetricContext(request, region string) *metricContext {
 | 
			
		||||
 
 | 
			
		||||
@@ -19,9 +19,9 @@ package gce
 | 
			
		||||
import (
 | 
			
		||||
	compute "google.golang.org/api/compute/v1"
 | 
			
		||||
 | 
			
		||||
	"k8s.io/kubernetes/pkg/cloudprovider/providers/gce/cloud"
 | 
			
		||||
	"k8s.io/kubernetes/pkg/cloudprovider/providers/gce/cloud/filter"
 | 
			
		||||
	"k8s.io/kubernetes/pkg/cloudprovider/providers/gce/cloud/meta"
 | 
			
		||||
	"github.com/GoogleCloudPlatform/k8s-cloud-provider/pkg/cloud"
 | 
			
		||||
	"github.com/GoogleCloudPlatform/k8s-cloud-provider/pkg/cloud/filter"
 | 
			
		||||
	"github.com/GoogleCloudPlatform/k8s-cloud-provider/pkg/cloud/meta"
 | 
			
		||||
)
 | 
			
		||||
 | 
			
		||||
func newCertMetricContext(request string) *metricContext {
 | 
			
		||||
 
 | 
			
		||||
@@ -33,12 +33,12 @@ import (
 | 
			
		||||
	"k8s.io/kubernetes/pkg/volume"
 | 
			
		||||
	volumeutil "k8s.io/kubernetes/pkg/volume/util"
 | 
			
		||||
 | 
			
		||||
	"github.com/GoogleCloudPlatform/k8s-cloud-provider/pkg/cloud"
 | 
			
		||||
	"github.com/GoogleCloudPlatform/k8s-cloud-provider/pkg/cloud/meta"
 | 
			
		||||
	compute "google.golang.org/api/compute/v1"
 | 
			
		||||
	"google.golang.org/api/googleapi"
 | 
			
		||||
	utilfeature "k8s.io/apiserver/pkg/util/feature"
 | 
			
		||||
	"k8s.io/klog"
 | 
			
		||||
	"k8s.io/kubernetes/pkg/cloudprovider/providers/gce/cloud"
 | 
			
		||||
	"k8s.io/kubernetes/pkg/cloudprovider/providers/gce/cloud/meta"
 | 
			
		||||
	"k8s.io/kubernetes/pkg/features"
 | 
			
		||||
)
 | 
			
		||||
 | 
			
		||||
 
 | 
			
		||||
@@ -20,9 +20,9 @@ import (
 | 
			
		||||
	"fmt"
 | 
			
		||||
	"net/http"
 | 
			
		||||
 | 
			
		||||
	"github.com/GoogleCloudPlatform/k8s-cloud-provider/pkg/cloud"
 | 
			
		||||
	compute "google.golang.org/api/compute/v1"
 | 
			
		||||
	"k8s.io/client-go/tools/cache"
 | 
			
		||||
	"k8s.io/kubernetes/pkg/cloudprovider/providers/gce/cloud"
 | 
			
		||||
)
 | 
			
		||||
 | 
			
		||||
// TestClusterValues holds the config values for the fake/test gce cloud object.
 | 
			
		||||
 
 | 
			
		||||
@@ -19,8 +19,8 @@ package gce
 | 
			
		||||
import (
 | 
			
		||||
	compute "google.golang.org/api/compute/v1"
 | 
			
		||||
 | 
			
		||||
	"k8s.io/kubernetes/pkg/cloudprovider/providers/gce/cloud"
 | 
			
		||||
	"k8s.io/kubernetes/pkg/cloudprovider/providers/gce/cloud/meta"
 | 
			
		||||
	"github.com/GoogleCloudPlatform/k8s-cloud-provider/pkg/cloud"
 | 
			
		||||
	"github.com/GoogleCloudPlatform/k8s-cloud-provider/pkg/cloud/meta"
 | 
			
		||||
)
 | 
			
		||||
 | 
			
		||||
func newFirewallMetricContext(request string) *metricContext {
 | 
			
		||||
 
 | 
			
		||||
@@ -17,11 +17,11 @@ limitations under the License.
 | 
			
		||||
package gce
 | 
			
		||||
 | 
			
		||||
import (
 | 
			
		||||
	"github.com/GoogleCloudPlatform/k8s-cloud-provider/pkg/cloud"
 | 
			
		||||
	"github.com/GoogleCloudPlatform/k8s-cloud-provider/pkg/cloud/filter"
 | 
			
		||||
	"github.com/GoogleCloudPlatform/k8s-cloud-provider/pkg/cloud/meta"
 | 
			
		||||
	computealpha "google.golang.org/api/compute/v0.alpha"
 | 
			
		||||
	compute "google.golang.org/api/compute/v1"
 | 
			
		||||
	"k8s.io/kubernetes/pkg/cloudprovider/providers/gce/cloud"
 | 
			
		||||
	"k8s.io/kubernetes/pkg/cloudprovider/providers/gce/cloud/filter"
 | 
			
		||||
	"k8s.io/kubernetes/pkg/cloudprovider/providers/gce/cloud/meta"
 | 
			
		||||
)
 | 
			
		||||
 | 
			
		||||
func newForwardingRuleMetricContext(request, region string) *metricContext {
 | 
			
		||||
 
 | 
			
		||||
@@ -23,11 +23,11 @@ import (
 | 
			
		||||
	computebeta "google.golang.org/api/compute/v0.beta"
 | 
			
		||||
	compute "google.golang.org/api/compute/v1"
 | 
			
		||||
 | 
			
		||||
	"github.com/GoogleCloudPlatform/k8s-cloud-provider/pkg/cloud"
 | 
			
		||||
	"github.com/GoogleCloudPlatform/k8s-cloud-provider/pkg/cloud/filter"
 | 
			
		||||
	"github.com/GoogleCloudPlatform/k8s-cloud-provider/pkg/cloud/meta"
 | 
			
		||||
	"k8s.io/api/core/v1"
 | 
			
		||||
	utilversion "k8s.io/apimachinery/pkg/util/version"
 | 
			
		||||
	"k8s.io/kubernetes/pkg/cloudprovider/providers/gce/cloud"
 | 
			
		||||
	"k8s.io/kubernetes/pkg/cloudprovider/providers/gce/cloud/filter"
 | 
			
		||||
	"k8s.io/kubernetes/pkg/cloudprovider/providers/gce/cloud/meta"
 | 
			
		||||
	"k8s.io/kubernetes/pkg/master/ports"
 | 
			
		||||
)
 | 
			
		||||
 | 
			
		||||
 
 | 
			
		||||
@@ -19,9 +19,9 @@ package gce
 | 
			
		||||
import (
 | 
			
		||||
	compute "google.golang.org/api/compute/v1"
 | 
			
		||||
 | 
			
		||||
	"k8s.io/kubernetes/pkg/cloudprovider/providers/gce/cloud"
 | 
			
		||||
	"k8s.io/kubernetes/pkg/cloudprovider/providers/gce/cloud/filter"
 | 
			
		||||
	"k8s.io/kubernetes/pkg/cloudprovider/providers/gce/cloud/meta"
 | 
			
		||||
	"github.com/GoogleCloudPlatform/k8s-cloud-provider/pkg/cloud"
 | 
			
		||||
	"github.com/GoogleCloudPlatform/k8s-cloud-provider/pkg/cloud/filter"
 | 
			
		||||
	"github.com/GoogleCloudPlatform/k8s-cloud-provider/pkg/cloud/meta"
 | 
			
		||||
)
 | 
			
		||||
 | 
			
		||||
func newInstanceGroupMetricContext(request string, zone string) *metricContext {
 | 
			
		||||
 
 | 
			
		||||
@@ -29,14 +29,14 @@ import (
 | 
			
		||||
	compute "google.golang.org/api/compute/v1"
 | 
			
		||||
	"k8s.io/klog"
 | 
			
		||||
 | 
			
		||||
	"github.com/GoogleCloudPlatform/k8s-cloud-provider/pkg/cloud"
 | 
			
		||||
	"github.com/GoogleCloudPlatform/k8s-cloud-provider/pkg/cloud/filter"
 | 
			
		||||
	"github.com/GoogleCloudPlatform/k8s-cloud-provider/pkg/cloud/meta"
 | 
			
		||||
	"k8s.io/api/core/v1"
 | 
			
		||||
	"k8s.io/apimachinery/pkg/types"
 | 
			
		||||
	"k8s.io/apimachinery/pkg/util/sets"
 | 
			
		||||
	"k8s.io/apimachinery/pkg/util/wait"
 | 
			
		||||
	cloudprovider "k8s.io/cloud-provider"
 | 
			
		||||
	"k8s.io/kubernetes/pkg/cloudprovider/providers/gce/cloud"
 | 
			
		||||
	"k8s.io/kubernetes/pkg/cloudprovider/providers/gce/cloud/filter"
 | 
			
		||||
	"k8s.io/kubernetes/pkg/cloudprovider/providers/gce/cloud/meta"
 | 
			
		||||
	kubeletapis "k8s.io/kubernetes/pkg/kubelet/apis"
 | 
			
		||||
)
 | 
			
		||||
 | 
			
		||||
 
 | 
			
		||||
@@ -26,9 +26,9 @@ import (
 | 
			
		||||
 | 
			
		||||
	"k8s.io/klog"
 | 
			
		||||
 | 
			
		||||
	"github.com/GoogleCloudPlatform/k8s-cloud-provider/pkg/cloud"
 | 
			
		||||
	"k8s.io/api/core/v1"
 | 
			
		||||
	cloudprovider "k8s.io/cloud-provider"
 | 
			
		||||
	"k8s.io/kubernetes/pkg/cloudprovider/providers/gce/cloud"
 | 
			
		||||
	netsets "k8s.io/kubernetes/pkg/util/net/sets"
 | 
			
		||||
)
 | 
			
		||||
 | 
			
		||||
 
 | 
			
		||||
@@ -23,12 +23,12 @@ import (
 | 
			
		||||
	"strconv"
 | 
			
		||||
	"strings"
 | 
			
		||||
 | 
			
		||||
	"github.com/GoogleCloudPlatform/k8s-cloud-provider/pkg/cloud"
 | 
			
		||||
	"k8s.io/api/core/v1"
 | 
			
		||||
	"k8s.io/apimachinery/pkg/types"
 | 
			
		||||
	utilerrors "k8s.io/apimachinery/pkg/util/errors"
 | 
			
		||||
	"k8s.io/apimachinery/pkg/util/sets"
 | 
			
		||||
	apiservice "k8s.io/kubernetes/pkg/api/v1/service"
 | 
			
		||||
	"k8s.io/kubernetes/pkg/cloudprovider/providers/gce/cloud"
 | 
			
		||||
	netsets "k8s.io/kubernetes/pkg/util/net/sets"
 | 
			
		||||
 | 
			
		||||
	computealpha "google.golang.org/api/compute/v0.alpha"
 | 
			
		||||
 
 | 
			
		||||
@@ -27,13 +27,13 @@ import (
 | 
			
		||||
	computealpha "google.golang.org/api/compute/v0.alpha"
 | 
			
		||||
	compute "google.golang.org/api/compute/v1"
 | 
			
		||||
 | 
			
		||||
	"github.com/GoogleCloudPlatform/k8s-cloud-provider/pkg/cloud"
 | 
			
		||||
	"github.com/GoogleCloudPlatform/k8s-cloud-provider/pkg/cloud/meta"
 | 
			
		||||
	"github.com/GoogleCloudPlatform/k8s-cloud-provider/pkg/cloud/mock"
 | 
			
		||||
	ga "google.golang.org/api/compute/v1"
 | 
			
		||||
	"k8s.io/api/core/v1"
 | 
			
		||||
	"k8s.io/apimachinery/pkg/types"
 | 
			
		||||
	"k8s.io/client-go/tools/record"
 | 
			
		||||
	"k8s.io/kubernetes/pkg/cloudprovider/providers/gce/cloud"
 | 
			
		||||
	"k8s.io/kubernetes/pkg/cloudprovider/providers/gce/cloud/meta"
 | 
			
		||||
	"k8s.io/kubernetes/pkg/cloudprovider/providers/gce/cloud/mock"
 | 
			
		||||
	netsets "k8s.io/kubernetes/pkg/util/net/sets"
 | 
			
		||||
)
 | 
			
		||||
 | 
			
		||||
 
 | 
			
		||||
@@ -22,13 +22,13 @@ import (
 | 
			
		||||
	"strconv"
 | 
			
		||||
	"strings"
 | 
			
		||||
 | 
			
		||||
	"github.com/GoogleCloudPlatform/k8s-cloud-provider/pkg/cloud"
 | 
			
		||||
	compute "google.golang.org/api/compute/v1"
 | 
			
		||||
	"k8s.io/api/core/v1"
 | 
			
		||||
	"k8s.io/apimachinery/pkg/types"
 | 
			
		||||
	"k8s.io/apimachinery/pkg/util/sets"
 | 
			
		||||
	"k8s.io/klog"
 | 
			
		||||
	v1_service "k8s.io/kubernetes/pkg/api/v1/service"
 | 
			
		||||
	"k8s.io/kubernetes/pkg/cloudprovider/providers/gce/cloud"
 | 
			
		||||
)
 | 
			
		||||
 | 
			
		||||
const (
 | 
			
		||||
 
 | 
			
		||||
@@ -25,13 +25,13 @@ import (
 | 
			
		||||
	"github.com/stretchr/testify/assert"
 | 
			
		||||
	"github.com/stretchr/testify/require"
 | 
			
		||||
 | 
			
		||||
	"github.com/GoogleCloudPlatform/k8s-cloud-provider/pkg/cloud"
 | 
			
		||||
	"github.com/GoogleCloudPlatform/k8s-cloud-provider/pkg/cloud/mock"
 | 
			
		||||
	compute "google.golang.org/api/compute/v1"
 | 
			
		||||
	"k8s.io/api/core/v1"
 | 
			
		||||
	"k8s.io/apimachinery/pkg/types"
 | 
			
		||||
	"k8s.io/client-go/tools/record"
 | 
			
		||||
	v1_service "k8s.io/kubernetes/pkg/api/v1/service"
 | 
			
		||||
	"k8s.io/kubernetes/pkg/cloudprovider/providers/gce/cloud"
 | 
			
		||||
	"k8s.io/kubernetes/pkg/cloudprovider/providers/gce/cloud/mock"
 | 
			
		||||
)
 | 
			
		||||
 | 
			
		||||
func createInternalLoadBalancer(gce *Cloud, svc *v1.Service, existingFwdRule *compute.ForwardingRule, nodeNames []string, clusterName, clusterID, zoneName string) (*v1.LoadBalancerStatus, error) {
 | 
			
		||||
 
 | 
			
		||||
@@ -22,9 +22,9 @@ import (
 | 
			
		||||
	"fmt"
 | 
			
		||||
	"strings"
 | 
			
		||||
 | 
			
		||||
	"github.com/GoogleCloudPlatform/k8s-cloud-provider/pkg/cloud"
 | 
			
		||||
	"k8s.io/api/core/v1"
 | 
			
		||||
	"k8s.io/apimachinery/pkg/types"
 | 
			
		||||
	"k8s.io/kubernetes/pkg/cloudprovider/providers/gce/cloud"
 | 
			
		||||
)
 | 
			
		||||
 | 
			
		||||
// Internal Load Balancer
 | 
			
		||||
 
 | 
			
		||||
@@ -31,11 +31,11 @@ import (
 | 
			
		||||
	"github.com/stretchr/testify/require"
 | 
			
		||||
	compute "google.golang.org/api/compute/v1"
 | 
			
		||||
 | 
			
		||||
	"github.com/GoogleCloudPlatform/k8s-cloud-provider/pkg/cloud"
 | 
			
		||||
	"k8s.io/api/core/v1"
 | 
			
		||||
	metav1 "k8s.io/apimachinery/pkg/apis/meta/v1"
 | 
			
		||||
	"k8s.io/client-go/tools/record"
 | 
			
		||||
	v1_service "k8s.io/kubernetes/pkg/api/v1/service"
 | 
			
		||||
	"k8s.io/kubernetes/pkg/cloudprovider/providers/gce/cloud"
 | 
			
		||||
	kubeletapis "k8s.io/kubernetes/pkg/kubelet/apis"
 | 
			
		||||
)
 | 
			
		||||
 | 
			
		||||
 
 | 
			
		||||
@@ -22,9 +22,9 @@ import (
 | 
			
		||||
 | 
			
		||||
	computebeta "google.golang.org/api/compute/v0.beta"
 | 
			
		||||
 | 
			
		||||
	"k8s.io/kubernetes/pkg/cloudprovider/providers/gce/cloud"
 | 
			
		||||
	"k8s.io/kubernetes/pkg/cloudprovider/providers/gce/cloud/filter"
 | 
			
		||||
	"k8s.io/kubernetes/pkg/cloudprovider/providers/gce/cloud/meta"
 | 
			
		||||
	"github.com/GoogleCloudPlatform/k8s-cloud-provider/pkg/cloud"
 | 
			
		||||
	"github.com/GoogleCloudPlatform/k8s-cloud-provider/pkg/cloud/filter"
 | 
			
		||||
	"github.com/GoogleCloudPlatform/k8s-cloud-provider/pkg/cloud/meta"
 | 
			
		||||
)
 | 
			
		||||
 | 
			
		||||
func newNetworkEndpointGroupMetricContext(request string, zone string) *metricContext {
 | 
			
		||||
 
 | 
			
		||||
@@ -26,10 +26,10 @@ import (
 | 
			
		||||
	"k8s.io/apimachinery/pkg/types"
 | 
			
		||||
	"k8s.io/klog"
 | 
			
		||||
 | 
			
		||||
	"github.com/GoogleCloudPlatform/k8s-cloud-provider/pkg/cloud"
 | 
			
		||||
	"github.com/GoogleCloudPlatform/k8s-cloud-provider/pkg/cloud/filter"
 | 
			
		||||
	"github.com/GoogleCloudPlatform/k8s-cloud-provider/pkg/cloud/meta"
 | 
			
		||||
	cloudprovider "k8s.io/cloud-provider"
 | 
			
		||||
	"k8s.io/kubernetes/pkg/cloudprovider/providers/gce/cloud"
 | 
			
		||||
	"k8s.io/kubernetes/pkg/cloudprovider/providers/gce/cloud/filter"
 | 
			
		||||
	"k8s.io/kubernetes/pkg/cloudprovider/providers/gce/cloud/meta"
 | 
			
		||||
)
 | 
			
		||||
 | 
			
		||||
func newRoutesMetricContext(request string) *metricContext {
 | 
			
		||||
 
 | 
			
		||||
@@ -19,9 +19,9 @@ package gce
 | 
			
		||||
import (
 | 
			
		||||
	computebeta "google.golang.org/api/compute/v0.beta"
 | 
			
		||||
 | 
			
		||||
	"k8s.io/kubernetes/pkg/cloudprovider/providers/gce/cloud"
 | 
			
		||||
	"k8s.io/kubernetes/pkg/cloudprovider/providers/gce/cloud/filter"
 | 
			
		||||
	"k8s.io/kubernetes/pkg/cloudprovider/providers/gce/cloud/meta"
 | 
			
		||||
	"github.com/GoogleCloudPlatform/k8s-cloud-provider/pkg/cloud"
 | 
			
		||||
	"github.com/GoogleCloudPlatform/k8s-cloud-provider/pkg/cloud/filter"
 | 
			
		||||
	"github.com/GoogleCloudPlatform/k8s-cloud-provider/pkg/cloud/meta"
 | 
			
		||||
)
 | 
			
		||||
 | 
			
		||||
func newSecurityPolicyMetricContextWithVersion(request, version string) *metricContext {
 | 
			
		||||
 
 | 
			
		||||
@@ -19,8 +19,8 @@ package gce
 | 
			
		||||
import (
 | 
			
		||||
	compute "google.golang.org/api/compute/v1"
 | 
			
		||||
 | 
			
		||||
	"k8s.io/kubernetes/pkg/cloudprovider/providers/gce/cloud"
 | 
			
		||||
	"k8s.io/kubernetes/pkg/cloudprovider/providers/gce/cloud/meta"
 | 
			
		||||
	"github.com/GoogleCloudPlatform/k8s-cloud-provider/pkg/cloud"
 | 
			
		||||
	"github.com/GoogleCloudPlatform/k8s-cloud-provider/pkg/cloud/meta"
 | 
			
		||||
)
 | 
			
		||||
 | 
			
		||||
func newTargetPoolMetricContext(request, region string) *metricContext {
 | 
			
		||||
 
 | 
			
		||||
@@ -19,9 +19,9 @@ package gce
 | 
			
		||||
import (
 | 
			
		||||
	compute "google.golang.org/api/compute/v1"
 | 
			
		||||
 | 
			
		||||
	"k8s.io/kubernetes/pkg/cloudprovider/providers/gce/cloud"
 | 
			
		||||
	"k8s.io/kubernetes/pkg/cloudprovider/providers/gce/cloud/filter"
 | 
			
		||||
	"k8s.io/kubernetes/pkg/cloudprovider/providers/gce/cloud/meta"
 | 
			
		||||
	"github.com/GoogleCloudPlatform/k8s-cloud-provider/pkg/cloud"
 | 
			
		||||
	"github.com/GoogleCloudPlatform/k8s-cloud-provider/pkg/cloud/filter"
 | 
			
		||||
	"github.com/GoogleCloudPlatform/k8s-cloud-provider/pkg/cloud/meta"
 | 
			
		||||
)
 | 
			
		||||
 | 
			
		||||
func newTargetProxyMetricContext(request string) *metricContext {
 | 
			
		||||
 
 | 
			
		||||
@@ -19,9 +19,9 @@ package gce
 | 
			
		||||
import (
 | 
			
		||||
	compute "google.golang.org/api/compute/v1"
 | 
			
		||||
 | 
			
		||||
	"k8s.io/kubernetes/pkg/cloudprovider/providers/gce/cloud"
 | 
			
		||||
	"k8s.io/kubernetes/pkg/cloudprovider/providers/gce/cloud/filter"
 | 
			
		||||
	"k8s.io/kubernetes/pkg/cloudprovider/providers/gce/cloud/meta"
 | 
			
		||||
	"github.com/GoogleCloudPlatform/k8s-cloud-provider/pkg/cloud"
 | 
			
		||||
	"github.com/GoogleCloudPlatform/k8s-cloud-provider/pkg/cloud/filter"
 | 
			
		||||
	"github.com/GoogleCloudPlatform/k8s-cloud-provider/pkg/cloud/meta"
 | 
			
		||||
)
 | 
			
		||||
 | 
			
		||||
func newURLMapMetricContext(request string) *metricContext {
 | 
			
		||||
 
 | 
			
		||||
@@ -26,12 +26,12 @@ import (
 | 
			
		||||
	"strings"
 | 
			
		||||
	"sync"
 | 
			
		||||
 | 
			
		||||
	"github.com/GoogleCloudPlatform/k8s-cloud-provider/pkg/cloud"
 | 
			
		||||
	"github.com/GoogleCloudPlatform/k8s-cloud-provider/pkg/cloud/meta"
 | 
			
		||||
	"github.com/GoogleCloudPlatform/k8s-cloud-provider/pkg/cloud/mock"
 | 
			
		||||
	"k8s.io/api/core/v1"
 | 
			
		||||
	"k8s.io/apimachinery/pkg/types"
 | 
			
		||||
	"k8s.io/apimachinery/pkg/util/sets"
 | 
			
		||||
	"k8s.io/kubernetes/pkg/cloudprovider/providers/gce/cloud"
 | 
			
		||||
	"k8s.io/kubernetes/pkg/cloudprovider/providers/gce/cloud/meta"
 | 
			
		||||
	"k8s.io/kubernetes/pkg/cloudprovider/providers/gce/cloud/mock"
 | 
			
		||||
 | 
			
		||||
	"cloud.google.com/go/compute/metadata"
 | 
			
		||||
	compute "google.golang.org/api/compute/v1"
 | 
			
		||||
 
 | 
			
		||||
@@ -22,10 +22,10 @@ import (
 | 
			
		||||
 | 
			
		||||
	compute "google.golang.org/api/compute/v1"
 | 
			
		||||
 | 
			
		||||
	"github.com/GoogleCloudPlatform/k8s-cloud-provider/pkg/cloud"
 | 
			
		||||
	"github.com/GoogleCloudPlatform/k8s-cloud-provider/pkg/cloud/filter"
 | 
			
		||||
	"k8s.io/apimachinery/pkg/types"
 | 
			
		||||
	cloudprovider "k8s.io/cloud-provider"
 | 
			
		||||
	"k8s.io/kubernetes/pkg/cloudprovider/providers/gce/cloud"
 | 
			
		||||
	"k8s.io/kubernetes/pkg/cloudprovider/providers/gce/cloud/filter"
 | 
			
		||||
)
 | 
			
		||||
 | 
			
		||||
func newZonesMetricContext(request, region string) *metricContext {
 | 
			
		||||
 
 | 
			
		||||
@@ -19,8 +19,8 @@ package gce
 | 
			
		||||
import (
 | 
			
		||||
	"context"
 | 
			
		||||
 | 
			
		||||
	"k8s.io/kubernetes/pkg/cloudprovider/providers/gce/cloud"
 | 
			
		||||
	"k8s.io/kubernetes/pkg/cloudprovider/providers/gce/cloud/meta"
 | 
			
		||||
	"github.com/GoogleCloudPlatform/k8s-cloud-provider/pkg/cloud"
 | 
			
		||||
	"github.com/GoogleCloudPlatform/k8s-cloud-provider/pkg/cloud/meta"
 | 
			
		||||
)
 | 
			
		||||
 | 
			
		||||
// gceProjectRouter sends requests to the appropriate project ID.
 | 
			
		||||
 
 | 
			
		||||
@@ -103,15 +103,16 @@
 | 
			
		||||
        "github.com/cloudflare/cfssl/signer",
 | 
			
		||||
        "github.com/cloudflare/cfssl/signer/local",
 | 
			
		||||
        "github.com/davecgh/go-spew/spew",
 | 
			
		||||
        "github.com/docker/distribution/reference",
 | 
			
		||||
        "github.com/evanphx/json-patch",
 | 
			
		||||
        "github.com/golang/groupcache/lru",
 | 
			
		||||
        "github.com/GoogleCloudPlatform/k8s-cloud-provider/pkg/cloud",
 | 
			
		||||
        "github.com/google/gofuzz",
 | 
			
		||||
        "github.com/prometheus/client_golang/prometheus",
 | 
			
		||||
        "github.com/robfig/cron",
 | 
			
		||||
        "github.com/spf13/pflag",
 | 
			
		||||
        "github.com/stretchr/testify/assert",
 | 
			
		||||
        "github.com/stretchr/testify/require",
 | 
			
		||||
        "github.com/docker/distribution/reference",
 | 
			
		||||
        "github.com/google/gofuzz"
 | 
			
		||||
        "github.com/stretchr/testify/require"
 | 
			
		||||
      ]
 | 
			
		||||
    },
 | 
			
		||||
    {
 | 
			
		||||
 
 | 
			
		||||
@@ -34,7 +34,6 @@ go_library(
 | 
			
		||||
        "//pkg/apis/core:go_default_library",
 | 
			
		||||
        "//pkg/client/clientset_generated/internalclientset:go_default_library",
 | 
			
		||||
        "//pkg/cloudprovider/providers/gce:go_default_library",
 | 
			
		||||
        "//pkg/cloudprovider/providers/gce/cloud:go_default_library",
 | 
			
		||||
        "//pkg/controller/endpoint:go_default_library",
 | 
			
		||||
        "//pkg/kubelet/apis:go_default_library",
 | 
			
		||||
        "//pkg/master/ports:go_default_library",
 | 
			
		||||
@@ -68,6 +67,7 @@ go_library(
 | 
			
		||||
        "//test/images/net/nat:go_default_library",
 | 
			
		||||
        "//test/utils:go_default_library",
 | 
			
		||||
        "//test/utils/image:go_default_library",
 | 
			
		||||
        "//vendor/github.com/GoogleCloudPlatform/k8s-cloud-provider/pkg/cloud:go_default_library",
 | 
			
		||||
        "//vendor/github.com/onsi/ginkgo:go_default_library",
 | 
			
		||||
        "//vendor/github.com/onsi/gomega:go_default_library",
 | 
			
		||||
        "//vendor/google.golang.org/api/compute/v0.alpha:go_default_library",
 | 
			
		||||
 
 | 
			
		||||
@@ -23,12 +23,12 @@ import (
 | 
			
		||||
 | 
			
		||||
	computealpha "google.golang.org/api/compute/v0.alpha"
 | 
			
		||||
 | 
			
		||||
	"k8s.io/api/core/v1"
 | 
			
		||||
	"github.com/GoogleCloudPlatform/k8s-cloud-provider/pkg/cloud"
 | 
			
		||||
	v1 "k8s.io/api/core/v1"
 | 
			
		||||
	"k8s.io/apimachinery/pkg/util/wait"
 | 
			
		||||
	clientset "k8s.io/client-go/kubernetes"
 | 
			
		||||
	cloudprovider "k8s.io/cloud-provider"
 | 
			
		||||
	gcecloud "k8s.io/kubernetes/pkg/cloudprovider/providers/gce"
 | 
			
		||||
	"k8s.io/kubernetes/pkg/cloudprovider/providers/gce/cloud"
 | 
			
		||||
	"k8s.io/kubernetes/test/e2e/framework"
 | 
			
		||||
	"k8s.io/kubernetes/test/e2e/framework/providers/gce"
 | 
			
		||||
 | 
			
		||||
 
 | 
			
		||||
@@ -47,8 +47,6 @@ go_library(
 | 
			
		||||
    ],
 | 
			
		||||
    importpath = "k8s.io/kubernetes/test/integration/ipamperf",
 | 
			
		||||
    deps = [
 | 
			
		||||
        "//pkg/cloudprovider/providers/gce/cloud:go_default_library",
 | 
			
		||||
        "//pkg/cloudprovider/providers/gce/cloud/meta:go_default_library",
 | 
			
		||||
        "//pkg/controller/nodeipam/ipam:go_default_library",
 | 
			
		||||
        "//pkg/controller/nodeipam/ipam/cidrset:go_default_library",
 | 
			
		||||
        "//pkg/controller/util/node:go_default_library",
 | 
			
		||||
@@ -63,6 +61,8 @@ go_library(
 | 
			
		||||
        "//staging/src/k8s.io/client-go/tools/cache:go_default_library",
 | 
			
		||||
        "//staging/src/k8s.io/cloud-provider:go_default_library",
 | 
			
		||||
        "//test/integration/util:go_default_library",
 | 
			
		||||
        "//vendor/github.com/GoogleCloudPlatform/k8s-cloud-provider/pkg/cloud:go_default_library",
 | 
			
		||||
        "//vendor/github.com/GoogleCloudPlatform/k8s-cloud-provider/pkg/cloud/meta:go_default_library",
 | 
			
		||||
        "//vendor/google.golang.org/api/compute/v0.beta:go_default_library",
 | 
			
		||||
        "//vendor/google.golang.org/api/compute/v1:go_default_library",
 | 
			
		||||
        "//vendor/k8s.io/klog:go_default_library",
 | 
			
		||||
 
 | 
			
		||||
@@ -21,10 +21,10 @@ import (
 | 
			
		||||
	"net"
 | 
			
		||||
	"sync"
 | 
			
		||||
 | 
			
		||||
	"github.com/GoogleCloudPlatform/k8s-cloud-provider/pkg/cloud"
 | 
			
		||||
	"github.com/GoogleCloudPlatform/k8s-cloud-provider/pkg/cloud/meta"
 | 
			
		||||
	beta "google.golang.org/api/compute/v0.beta"
 | 
			
		||||
	ga "google.golang.org/api/compute/v1"
 | 
			
		||||
	"k8s.io/kubernetes/pkg/cloudprovider/providers/gce/cloud"
 | 
			
		||||
	"k8s.io/kubernetes/pkg/cloudprovider/providers/gce/cloud/meta"
 | 
			
		||||
	"k8s.io/kubernetes/pkg/controller/nodeipam/ipam/cidrset"
 | 
			
		||||
	"k8s.io/kubernetes/test/integration/util"
 | 
			
		||||
)
 | 
			
		||||
 
 | 
			
		||||
@@ -15,7 +15,6 @@ go_library(
 | 
			
		||||
    deps = [
 | 
			
		||||
        "//pkg/api/legacyscheme:go_default_library",
 | 
			
		||||
        "//pkg/cloudprovider/providers/gce:go_default_library",
 | 
			
		||||
        "//pkg/cloudprovider/providers/gce/cloud:go_default_library",
 | 
			
		||||
        "//pkg/scheduler:go_default_library",
 | 
			
		||||
        "//pkg/scheduler/api:go_default_library",
 | 
			
		||||
        "//pkg/scheduler/factory:go_default_library",
 | 
			
		||||
@@ -25,6 +24,7 @@ go_library(
 | 
			
		||||
        "//staging/src/k8s.io/client-go/kubernetes/typed/core/v1:go_default_library",
 | 
			
		||||
        "//staging/src/k8s.io/client-go/tools/record:go_default_library",
 | 
			
		||||
        "//test/integration/framework:go_default_library",
 | 
			
		||||
        "//vendor/github.com/GoogleCloudPlatform/k8s-cloud-provider/pkg/cloud:go_default_library",
 | 
			
		||||
        "//vendor/golang.org/x/oauth2:go_default_library",
 | 
			
		||||
        "//vendor/k8s.io/klog:go_default_library",
 | 
			
		||||
    ],
 | 
			
		||||
 
 | 
			
		||||
@@ -19,9 +19,9 @@ package util
 | 
			
		||||
import (
 | 
			
		||||
	"time"
 | 
			
		||||
 | 
			
		||||
	"github.com/GoogleCloudPlatform/k8s-cloud-provider/pkg/cloud"
 | 
			
		||||
	"golang.org/x/oauth2"
 | 
			
		||||
	"k8s.io/kubernetes/pkg/cloudprovider/providers/gce"
 | 
			
		||||
	"k8s.io/kubernetes/pkg/cloudprovider/providers/gce/cloud"
 | 
			
		||||
)
 | 
			
		||||
 | 
			
		||||
const (
 | 
			
		||||
 
 | 
			
		||||
							
								
								
									
										1
									
								
								vendor/BUILD
									
									
									
									
										vendored
									
									
								
							
							
						
						
									
										1
									
								
								vendor/BUILD
									
									
									
									
										vendored
									
									
								
							@@ -26,6 +26,7 @@ filegroup(
 | 
			
		||||
        "//vendor/github.com/Azure/go-autorest/logger:all-srcs",
 | 
			
		||||
        "//vendor/github.com/Azure/go-autorest/version:all-srcs",
 | 
			
		||||
        "//vendor/github.com/GeertJohan/go.rice:all-srcs",
 | 
			
		||||
        "//vendor/github.com/GoogleCloudPlatform/k8s-cloud-provider/pkg/cloud:all-srcs",
 | 
			
		||||
        "//vendor/github.com/JeffAshton/win_pdh:all-srcs",
 | 
			
		||||
        "//vendor/github.com/MakeNowJust/heredoc:all-srcs",
 | 
			
		||||
        "//vendor/github.com/Microsoft/go-winio:all-srcs",
 | 
			
		||||
 
 | 
			
		||||
							
								
								
									
										202
									
								
								vendor/github.com/GoogleCloudPlatform/k8s-cloud-provider/LICENSE
									
									
									
										generated
									
									
										vendored
									
									
										Normal file
									
								
							
							
						
						
									
										202
									
								
								vendor/github.com/GoogleCloudPlatform/k8s-cloud-provider/LICENSE
									
									
									
										generated
									
									
										vendored
									
									
										Normal file
									
								
							@@ -0,0 +1,202 @@
 | 
			
		||||
 | 
			
		||||
                                 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.
 | 
			
		||||
							
								
								
									
										49
									
								
								vendor/github.com/GoogleCloudPlatform/k8s-cloud-provider/pkg/cloud/BUILD
									
									
									
										generated
									
									
										vendored
									
									
										Normal file
									
								
							
							
						
						
									
										49
									
								
								vendor/github.com/GoogleCloudPlatform/k8s-cloud-provider/pkg/cloud/BUILD
									
									
									
										generated
									
									
										vendored
									
									
										Normal file
									
								
							@@ -0,0 +1,49 @@
 | 
			
		||||
load("@io_bazel_rules_go//go:def.bzl", "go_library")
 | 
			
		||||
 | 
			
		||||
go_library(
 | 
			
		||||
    name = "go_default_library",
 | 
			
		||||
    srcs = [
 | 
			
		||||
        "constants.go",
 | 
			
		||||
        "context.go",
 | 
			
		||||
        "doc.go",
 | 
			
		||||
        "gce_projects.go",
 | 
			
		||||
        "gen.go",
 | 
			
		||||
        "op.go",
 | 
			
		||||
        "project.go",
 | 
			
		||||
        "ratelimit.go",
 | 
			
		||||
        "service.go",
 | 
			
		||||
        "utils.go",
 | 
			
		||||
    ],
 | 
			
		||||
    importmap = "k8s.io/kubernetes/vendor/github.com/GoogleCloudPlatform/k8s-cloud-provider/pkg/cloud",
 | 
			
		||||
    importpath = "github.com/GoogleCloudPlatform/k8s-cloud-provider/pkg/cloud",
 | 
			
		||||
    visibility = ["//visibility:public"],
 | 
			
		||||
    deps = [
 | 
			
		||||
        "//vendor/github.com/GoogleCloudPlatform/k8s-cloud-provider/pkg/cloud/filter:go_default_library",
 | 
			
		||||
        "//vendor/github.com/GoogleCloudPlatform/k8s-cloud-provider/pkg/cloud/meta:go_default_library",
 | 
			
		||||
        "//vendor/google.golang.org/api/compute/v0.alpha:go_default_library",
 | 
			
		||||
        "//vendor/google.golang.org/api/compute/v0.beta:go_default_library",
 | 
			
		||||
        "//vendor/google.golang.org/api/compute/v1:go_default_library",
 | 
			
		||||
        "//vendor/google.golang.org/api/googleapi:go_default_library",
 | 
			
		||||
        "//vendor/k8s.io/klog:go_default_library",
 | 
			
		||||
    ],
 | 
			
		||||
)
 | 
			
		||||
 | 
			
		||||
filegroup(
 | 
			
		||||
    name = "package-srcs",
 | 
			
		||||
    srcs = glob(["**"]),
 | 
			
		||||
    tags = ["automanaged"],
 | 
			
		||||
    visibility = ["//visibility:private"],
 | 
			
		||||
)
 | 
			
		||||
 | 
			
		||||
filegroup(
 | 
			
		||||
    name = "all-srcs",
 | 
			
		||||
    srcs = [
 | 
			
		||||
        ":package-srcs",
 | 
			
		||||
        "//vendor/github.com/GoogleCloudPlatform/k8s-cloud-provider/pkg/cloud/filter:all-srcs",
 | 
			
		||||
        "//vendor/github.com/GoogleCloudPlatform/k8s-cloud-provider/pkg/cloud/gen:all-srcs",
 | 
			
		||||
        "//vendor/github.com/GoogleCloudPlatform/k8s-cloud-provider/pkg/cloud/meta:all-srcs",
 | 
			
		||||
        "//vendor/github.com/GoogleCloudPlatform/k8s-cloud-provider/pkg/cloud/mock:all-srcs",
 | 
			
		||||
    ],
 | 
			
		||||
    tags = ["automanaged"],
 | 
			
		||||
    visibility = ["//visibility:public"],
 | 
			
		||||
)
 | 
			
		||||
@@ -1,11 +1,11 @@
 | 
			
		||||
/*
 | 
			
		||||
Copyright 2017 The Kubernetes Authors.
 | 
			
		||||
Copyright 2018 Google LLC
 | 
			
		||||
 | 
			
		||||
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
 | 
			
		||||
https://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,
 | 
			
		||||
@@ -1,11 +1,11 @@
 | 
			
		||||
/*
 | 
			
		||||
Copyright 2018 The Kubernetes Authors.
 | 
			
		||||
Copyright 2018 Google LLC
 | 
			
		||||
 | 
			
		||||
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
 | 
			
		||||
https://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,
 | 
			
		||||
@@ -1,11 +1,11 @@
 | 
			
		||||
/*
 | 
			
		||||
Copyright 2017 The Kubernetes Authors.
 | 
			
		||||
Copyright 2018 Google LLC
 | 
			
		||||
 | 
			
		||||
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
 | 
			
		||||
https://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,
 | 
			
		||||
@@ -1,19 +1,14 @@
 | 
			
		||||
load("@io_bazel_rules_go//go:def.bzl", "go_library", "go_test")
 | 
			
		||||
load("@io_bazel_rules_go//go:def.bzl", "go_library")
 | 
			
		||||
 | 
			
		||||
go_library(
 | 
			
		||||
    name = "go_default_library",
 | 
			
		||||
    srcs = ["filter.go"],
 | 
			
		||||
    importpath = "k8s.io/kubernetes/pkg/cloudprovider/providers/gce/cloud/filter",
 | 
			
		||||
    importmap = "k8s.io/kubernetes/vendor/github.com/GoogleCloudPlatform/k8s-cloud-provider/pkg/cloud/filter",
 | 
			
		||||
    importpath = "github.com/GoogleCloudPlatform/k8s-cloud-provider/pkg/cloud/filter",
 | 
			
		||||
    visibility = ["//visibility:public"],
 | 
			
		||||
    deps = ["//vendor/k8s.io/klog:go_default_library"],
 | 
			
		||||
)
 | 
			
		||||
 | 
			
		||||
go_test(
 | 
			
		||||
    name = "go_default_test",
 | 
			
		||||
    srcs = ["filter_test.go"],
 | 
			
		||||
    embed = [":go_default_library"],
 | 
			
		||||
)
 | 
			
		||||
 | 
			
		||||
filegroup(
 | 
			
		||||
    name = "package-srcs",
 | 
			
		||||
    srcs = glob(["**"]),
 | 
			
		||||
@@ -1,11 +1,11 @@
 | 
			
		||||
/*
 | 
			
		||||
Copyright 2017 The Kubernetes Authors.
 | 
			
		||||
Copyright 2018 Google LLC
 | 
			
		||||
 | 
			
		||||
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
 | 
			
		||||
https://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,
 | 
			
		||||
@@ -1,11 +1,11 @@
 | 
			
		||||
/*
 | 
			
		||||
Copyright 2017 The Kubernetes Authors.
 | 
			
		||||
Copyright 2018 Google LLC
 | 
			
		||||
 | 
			
		||||
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
 | 
			
		||||
https://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,
 | 
			
		||||
@@ -21,9 +21,9 @@ import (
 | 
			
		||||
	"fmt"
 | 
			
		||||
	"net/http"
 | 
			
		||||
 | 
			
		||||
	"github.com/GoogleCloudPlatform/k8s-cloud-provider/pkg/cloud/meta"
 | 
			
		||||
	compute "google.golang.org/api/compute/v1"
 | 
			
		||||
	"google.golang.org/api/googleapi"
 | 
			
		||||
	"k8s.io/kubernetes/pkg/cloudprovider/providers/gce/cloud/meta"
 | 
			
		||||
)
 | 
			
		||||
 | 
			
		||||
// ProjectsOps is the manually implemented methods for the Projects service.
 | 
			
		||||
@@ -1,11 +1,11 @@
 | 
			
		||||
/*
 | 
			
		||||
Copyright 2018 The Kubernetes Authors.
 | 
			
		||||
Copyright 2018 Google LLC
 | 
			
		||||
 | 
			
		||||
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
 | 
			
		||||
https://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,
 | 
			
		||||
@@ -28,8 +28,8 @@ import (
 | 
			
		||||
	"google.golang.org/api/googleapi"
 | 
			
		||||
	"k8s.io/klog"
 | 
			
		||||
 | 
			
		||||
	"k8s.io/kubernetes/pkg/cloudprovider/providers/gce/cloud/filter"
 | 
			
		||||
	"k8s.io/kubernetes/pkg/cloudprovider/providers/gce/cloud/meta"
 | 
			
		||||
	"github.com/GoogleCloudPlatform/k8s-cloud-provider/pkg/cloud/filter"
 | 
			
		||||
	"github.com/GoogleCloudPlatform/k8s-cloud-provider/pkg/cloud/meta"
 | 
			
		||||
 | 
			
		||||
	alpha "google.golang.org/api/compute/v0.alpha"
 | 
			
		||||
	beta "google.golang.org/api/compute/v0.beta"
 | 
			
		||||
@@ -54,8 +54,8 @@ type Cloud interface {
 | 
			
		||||
	AlphaForwardingRules() AlphaForwardingRules
 | 
			
		||||
	GlobalForwardingRules() GlobalForwardingRules
 | 
			
		||||
	HealthChecks() HealthChecks
 | 
			
		||||
	BetaHealthChecks() BetaHealthChecks
 | 
			
		||||
	AlphaHealthChecks() AlphaHealthChecks
 | 
			
		||||
	BetaHealthChecks() BetaHealthChecks
 | 
			
		||||
	HttpHealthChecks() HttpHealthChecks
 | 
			
		||||
	HttpsHealthChecks() HttpsHealthChecks
 | 
			
		||||
	InstanceGroups() InstanceGroups
 | 
			
		||||
@@ -95,8 +95,8 @@ func NewGCE(s *Service) *GCE {
 | 
			
		||||
		gceAlphaForwardingRules:       &GCEAlphaForwardingRules{s},
 | 
			
		||||
		gceGlobalForwardingRules:      &GCEGlobalForwardingRules{s},
 | 
			
		||||
		gceHealthChecks:               &GCEHealthChecks{s},
 | 
			
		||||
		gceBetaHealthChecks:           &GCEBetaHealthChecks{s},
 | 
			
		||||
		gceAlphaHealthChecks:          &GCEAlphaHealthChecks{s},
 | 
			
		||||
		gceBetaHealthChecks:           &GCEBetaHealthChecks{s},
 | 
			
		||||
		gceHttpHealthChecks:           &GCEHttpHealthChecks{s},
 | 
			
		||||
		gceHttpsHealthChecks:          &GCEHttpsHealthChecks{s},
 | 
			
		||||
		gceInstanceGroups:             &GCEInstanceGroups{s},
 | 
			
		||||
@@ -140,8 +140,8 @@ type GCE struct {
 | 
			
		||||
	gceAlphaForwardingRules       *GCEAlphaForwardingRules
 | 
			
		||||
	gceGlobalForwardingRules      *GCEGlobalForwardingRules
 | 
			
		||||
	gceHealthChecks               *GCEHealthChecks
 | 
			
		||||
	gceBetaHealthChecks           *GCEBetaHealthChecks
 | 
			
		||||
	gceAlphaHealthChecks          *GCEAlphaHealthChecks
 | 
			
		||||
	gceBetaHealthChecks           *GCEBetaHealthChecks
 | 
			
		||||
	gceHttpHealthChecks           *GCEHttpHealthChecks
 | 
			
		||||
	gceHttpsHealthChecks          *GCEHttpsHealthChecks
 | 
			
		||||
	gceInstanceGroups             *GCEInstanceGroups
 | 
			
		||||
@@ -242,16 +242,16 @@ func (gce *GCE) HealthChecks() HealthChecks {
 | 
			
		||||
	return gce.gceHealthChecks
 | 
			
		||||
}
 | 
			
		||||
 | 
			
		||||
// BetaHealthChecks returns the interface for the beta HealthChecks.
 | 
			
		||||
func (gce *GCE) BetaHealthChecks() BetaHealthChecks {
 | 
			
		||||
	return gce.gceBetaHealthChecks
 | 
			
		||||
}
 | 
			
		||||
 | 
			
		||||
// AlphaHealthChecks returns the interface for the alpha HealthChecks.
 | 
			
		||||
func (gce *GCE) AlphaHealthChecks() AlphaHealthChecks {
 | 
			
		||||
	return gce.gceAlphaHealthChecks
 | 
			
		||||
}
 | 
			
		||||
 | 
			
		||||
// BetaHealthChecks returns the interface for the beta HealthChecks.
 | 
			
		||||
func (gce *GCE) BetaHealthChecks() BetaHealthChecks {
 | 
			
		||||
	return gce.gceBetaHealthChecks
 | 
			
		||||
}
 | 
			
		||||
 | 
			
		||||
// HttpHealthChecks returns the interface for the ga HttpHealthChecks.
 | 
			
		||||
func (gce *GCE) HttpHealthChecks() HttpHealthChecks {
 | 
			
		||||
	return gce.gceHttpHealthChecks
 | 
			
		||||
@@ -387,8 +387,8 @@ func NewMockGCE(projectRouter ProjectRouter) *MockGCE {
 | 
			
		||||
		MockAlphaForwardingRules:       NewMockAlphaForwardingRules(projectRouter, mockForwardingRulesObjs),
 | 
			
		||||
		MockGlobalForwardingRules:      NewMockGlobalForwardingRules(projectRouter, mockGlobalForwardingRulesObjs),
 | 
			
		||||
		MockHealthChecks:               NewMockHealthChecks(projectRouter, mockHealthChecksObjs),
 | 
			
		||||
		MockBetaHealthChecks:           NewMockBetaHealthChecks(projectRouter, mockHealthChecksObjs),
 | 
			
		||||
		MockAlphaHealthChecks:          NewMockAlphaHealthChecks(projectRouter, mockHealthChecksObjs),
 | 
			
		||||
		MockBetaHealthChecks:           NewMockBetaHealthChecks(projectRouter, mockHealthChecksObjs),
 | 
			
		||||
		MockHttpHealthChecks:           NewMockHttpHealthChecks(projectRouter, mockHttpHealthChecksObjs),
 | 
			
		||||
		MockHttpsHealthChecks:          NewMockHttpsHealthChecks(projectRouter, mockHttpsHealthChecksObjs),
 | 
			
		||||
		MockInstanceGroups:             NewMockInstanceGroups(projectRouter, mockInstanceGroupsObjs),
 | 
			
		||||
@@ -432,8 +432,8 @@ type MockGCE struct {
 | 
			
		||||
	MockAlphaForwardingRules       *MockAlphaForwardingRules
 | 
			
		||||
	MockGlobalForwardingRules      *MockGlobalForwardingRules
 | 
			
		||||
	MockHealthChecks               *MockHealthChecks
 | 
			
		||||
	MockBetaHealthChecks           *MockBetaHealthChecks
 | 
			
		||||
	MockAlphaHealthChecks          *MockAlphaHealthChecks
 | 
			
		||||
	MockBetaHealthChecks           *MockBetaHealthChecks
 | 
			
		||||
	MockHttpHealthChecks           *MockHttpHealthChecks
 | 
			
		||||
	MockHttpsHealthChecks          *MockHttpsHealthChecks
 | 
			
		||||
	MockInstanceGroups             *MockInstanceGroups
 | 
			
		||||
@@ -534,16 +534,16 @@ func (mock *MockGCE) HealthChecks() HealthChecks {
 | 
			
		||||
	return mock.MockHealthChecks
 | 
			
		||||
}
 | 
			
		||||
 | 
			
		||||
// BetaHealthChecks returns the interface for the beta HealthChecks.
 | 
			
		||||
func (mock *MockGCE) BetaHealthChecks() BetaHealthChecks {
 | 
			
		||||
	return mock.MockBetaHealthChecks
 | 
			
		||||
}
 | 
			
		||||
 | 
			
		||||
// AlphaHealthChecks returns the interface for the alpha HealthChecks.
 | 
			
		||||
func (mock *MockGCE) AlphaHealthChecks() AlphaHealthChecks {
 | 
			
		||||
	return mock.MockAlphaHealthChecks
 | 
			
		||||
}
 | 
			
		||||
 | 
			
		||||
// BetaHealthChecks returns the interface for the beta HealthChecks.
 | 
			
		||||
func (mock *MockGCE) BetaHealthChecks() BetaHealthChecks {
 | 
			
		||||
	return mock.MockBetaHealthChecks
 | 
			
		||||
}
 | 
			
		||||
 | 
			
		||||
// HttpHealthChecks returns the interface for the ga HttpHealthChecks.
 | 
			
		||||
func (mock *MockGCE) HttpHealthChecks() HttpHealthChecks {
 | 
			
		||||
	return mock.MockHttpHealthChecks
 | 
			
		||||
@@ -7280,381 +7280,6 @@ func (g *GCEHealthChecks) Update(ctx context.Context, key *meta.Key, arg0 *ga.He
 | 
			
		||||
	return err
 | 
			
		||||
}
 | 
			
		||||
 | 
			
		||||
// BetaHealthChecks is an interface that allows for mocking of HealthChecks.
 | 
			
		||||
type BetaHealthChecks interface {
 | 
			
		||||
	Get(ctx context.Context, key *meta.Key) (*beta.HealthCheck, error)
 | 
			
		||||
	List(ctx context.Context, fl *filter.F) ([]*beta.HealthCheck, error)
 | 
			
		||||
	Insert(ctx context.Context, key *meta.Key, obj *beta.HealthCheck) error
 | 
			
		||||
	Delete(ctx context.Context, key *meta.Key) error
 | 
			
		||||
	Update(context.Context, *meta.Key, *beta.HealthCheck) error
 | 
			
		||||
}
 | 
			
		||||
 | 
			
		||||
// NewMockBetaHealthChecks returns a new mock for HealthChecks.
 | 
			
		||||
func NewMockBetaHealthChecks(pr ProjectRouter, objs map[meta.Key]*MockHealthChecksObj) *MockBetaHealthChecks {
 | 
			
		||||
	mock := &MockBetaHealthChecks{
 | 
			
		||||
		ProjectRouter: pr,
 | 
			
		||||
 | 
			
		||||
		Objects:     objs,
 | 
			
		||||
		GetError:    map[meta.Key]error{},
 | 
			
		||||
		InsertError: map[meta.Key]error{},
 | 
			
		||||
		DeleteError: map[meta.Key]error{},
 | 
			
		||||
	}
 | 
			
		||||
	return mock
 | 
			
		||||
}
 | 
			
		||||
 | 
			
		||||
// MockBetaHealthChecks is the mock for HealthChecks.
 | 
			
		||||
type MockBetaHealthChecks struct {
 | 
			
		||||
	Lock sync.Mutex
 | 
			
		||||
 | 
			
		||||
	ProjectRouter ProjectRouter
 | 
			
		||||
 | 
			
		||||
	// Objects maintained by the mock.
 | 
			
		||||
	Objects map[meta.Key]*MockHealthChecksObj
 | 
			
		||||
 | 
			
		||||
	// If an entry exists for the given key and operation, then the error
 | 
			
		||||
	// will be returned instead of the operation.
 | 
			
		||||
	GetError    map[meta.Key]error
 | 
			
		||||
	ListError   *error
 | 
			
		||||
	InsertError map[meta.Key]error
 | 
			
		||||
	DeleteError map[meta.Key]error
 | 
			
		||||
 | 
			
		||||
	// xxxHook allow you to intercept the standard processing of the mock in
 | 
			
		||||
	// order to add your own logic. Return (true, _, _) to prevent the normal
 | 
			
		||||
	// execution flow of the mock. Return (false, nil, nil) to continue with
 | 
			
		||||
	// normal mock behavior/ after the hook function executes.
 | 
			
		||||
	GetHook    func(ctx context.Context, key *meta.Key, m *MockBetaHealthChecks) (bool, *beta.HealthCheck, error)
 | 
			
		||||
	ListHook   func(ctx context.Context, fl *filter.F, m *MockBetaHealthChecks) (bool, []*beta.HealthCheck, error)
 | 
			
		||||
	InsertHook func(ctx context.Context, key *meta.Key, obj *beta.HealthCheck, m *MockBetaHealthChecks) (bool, error)
 | 
			
		||||
	DeleteHook func(ctx context.Context, key *meta.Key, m *MockBetaHealthChecks) (bool, error)
 | 
			
		||||
	UpdateHook func(context.Context, *meta.Key, *beta.HealthCheck, *MockBetaHealthChecks) error
 | 
			
		||||
 | 
			
		||||
	// X is extra state that can be used as part of the mock. Generated code
 | 
			
		||||
	// will not use this field.
 | 
			
		||||
	X interface{}
 | 
			
		||||
}
 | 
			
		||||
 | 
			
		||||
// Get returns the object from the mock.
 | 
			
		||||
func (m *MockBetaHealthChecks) Get(ctx context.Context, key *meta.Key) (*beta.HealthCheck, error) {
 | 
			
		||||
	if m.GetHook != nil {
 | 
			
		||||
		if intercept, obj, err := m.GetHook(ctx, key, m); intercept {
 | 
			
		||||
			klog.V(5).Infof("MockBetaHealthChecks.Get(%v, %s) = %+v, %v", ctx, key, obj, err)
 | 
			
		||||
			return obj, err
 | 
			
		||||
		}
 | 
			
		||||
	}
 | 
			
		||||
	if !key.Valid() {
 | 
			
		||||
		return nil, fmt.Errorf("invalid GCE key (%+v)", key)
 | 
			
		||||
	}
 | 
			
		||||
 | 
			
		||||
	m.Lock.Lock()
 | 
			
		||||
	defer m.Lock.Unlock()
 | 
			
		||||
 | 
			
		||||
	if err, ok := m.GetError[*key]; ok {
 | 
			
		||||
		klog.V(5).Infof("MockBetaHealthChecks.Get(%v, %s) = nil, %v", ctx, key, err)
 | 
			
		||||
		return nil, err
 | 
			
		||||
	}
 | 
			
		||||
	if obj, ok := m.Objects[*key]; ok {
 | 
			
		||||
		typedObj := obj.ToBeta()
 | 
			
		||||
		klog.V(5).Infof("MockBetaHealthChecks.Get(%v, %s) = %+v, nil", ctx, key, typedObj)
 | 
			
		||||
		return typedObj, nil
 | 
			
		||||
	}
 | 
			
		||||
 | 
			
		||||
	err := &googleapi.Error{
 | 
			
		||||
		Code:    http.StatusNotFound,
 | 
			
		||||
		Message: fmt.Sprintf("MockBetaHealthChecks %v not found", key),
 | 
			
		||||
	}
 | 
			
		||||
	klog.V(5).Infof("MockBetaHealthChecks.Get(%v, %s) = nil, %v", ctx, key, err)
 | 
			
		||||
	return nil, err
 | 
			
		||||
}
 | 
			
		||||
 | 
			
		||||
// List all of the objects in the mock.
 | 
			
		||||
func (m *MockBetaHealthChecks) List(ctx context.Context, fl *filter.F) ([]*beta.HealthCheck, error) {
 | 
			
		||||
	if m.ListHook != nil {
 | 
			
		||||
		if intercept, objs, err := m.ListHook(ctx, fl, m); intercept {
 | 
			
		||||
			klog.V(5).Infof("MockBetaHealthChecks.List(%v, %v) = [%v items], %v", ctx, fl, len(objs), err)
 | 
			
		||||
			return objs, err
 | 
			
		||||
		}
 | 
			
		||||
	}
 | 
			
		||||
 | 
			
		||||
	m.Lock.Lock()
 | 
			
		||||
	defer m.Lock.Unlock()
 | 
			
		||||
 | 
			
		||||
	if m.ListError != nil {
 | 
			
		||||
		err := *m.ListError
 | 
			
		||||
		klog.V(5).Infof("MockBetaHealthChecks.List(%v, %v) = nil, %v", ctx, fl, err)
 | 
			
		||||
 | 
			
		||||
		return nil, *m.ListError
 | 
			
		||||
	}
 | 
			
		||||
 | 
			
		||||
	var objs []*beta.HealthCheck
 | 
			
		||||
	for _, obj := range m.Objects {
 | 
			
		||||
		if !fl.Match(obj.ToBeta()) {
 | 
			
		||||
			continue
 | 
			
		||||
		}
 | 
			
		||||
		objs = append(objs, obj.ToBeta())
 | 
			
		||||
	}
 | 
			
		||||
 | 
			
		||||
	klog.V(5).Infof("MockBetaHealthChecks.List(%v, %v) = [%v items], nil", ctx, fl, len(objs))
 | 
			
		||||
	return objs, nil
 | 
			
		||||
}
 | 
			
		||||
 | 
			
		||||
// Insert is a mock for inserting/creating a new object.
 | 
			
		||||
func (m *MockBetaHealthChecks) Insert(ctx context.Context, key *meta.Key, obj *beta.HealthCheck) error {
 | 
			
		||||
	if m.InsertHook != nil {
 | 
			
		||||
		if intercept, err := m.InsertHook(ctx, key, obj, m); intercept {
 | 
			
		||||
			klog.V(5).Infof("MockBetaHealthChecks.Insert(%v, %v, %+v) = %v", ctx, key, obj, err)
 | 
			
		||||
			return err
 | 
			
		||||
		}
 | 
			
		||||
	}
 | 
			
		||||
	if !key.Valid() {
 | 
			
		||||
		return fmt.Errorf("invalid GCE key (%+v)", key)
 | 
			
		||||
	}
 | 
			
		||||
 | 
			
		||||
	m.Lock.Lock()
 | 
			
		||||
	defer m.Lock.Unlock()
 | 
			
		||||
 | 
			
		||||
	if err, ok := m.InsertError[*key]; ok {
 | 
			
		||||
		klog.V(5).Infof("MockBetaHealthChecks.Insert(%v, %v, %+v) = %v", ctx, key, obj, err)
 | 
			
		||||
		return err
 | 
			
		||||
	}
 | 
			
		||||
	if _, ok := m.Objects[*key]; ok {
 | 
			
		||||
		err := &googleapi.Error{
 | 
			
		||||
			Code:    http.StatusConflict,
 | 
			
		||||
			Message: fmt.Sprintf("MockBetaHealthChecks %v exists", key),
 | 
			
		||||
		}
 | 
			
		||||
		klog.V(5).Infof("MockBetaHealthChecks.Insert(%v, %v, %+v) = %v", ctx, key, obj, err)
 | 
			
		||||
		return err
 | 
			
		||||
	}
 | 
			
		||||
 | 
			
		||||
	obj.Name = key.Name
 | 
			
		||||
	projectID := m.ProjectRouter.ProjectID(ctx, "beta", "healthChecks")
 | 
			
		||||
	obj.SelfLink = SelfLink(meta.VersionBeta, projectID, "healthChecks", key)
 | 
			
		||||
 | 
			
		||||
	m.Objects[*key] = &MockHealthChecksObj{obj}
 | 
			
		||||
	klog.V(5).Infof("MockBetaHealthChecks.Insert(%v, %v, %+v) = nil", ctx, key, obj)
 | 
			
		||||
	return nil
 | 
			
		||||
}
 | 
			
		||||
 | 
			
		||||
// Delete is a mock for deleting the object.
 | 
			
		||||
func (m *MockBetaHealthChecks) Delete(ctx context.Context, key *meta.Key) error {
 | 
			
		||||
	if m.DeleteHook != nil {
 | 
			
		||||
		if intercept, err := m.DeleteHook(ctx, key, m); intercept {
 | 
			
		||||
			klog.V(5).Infof("MockBetaHealthChecks.Delete(%v, %v) = %v", ctx, key, err)
 | 
			
		||||
			return err
 | 
			
		||||
		}
 | 
			
		||||
	}
 | 
			
		||||
	if !key.Valid() {
 | 
			
		||||
		return fmt.Errorf("invalid GCE key (%+v)", key)
 | 
			
		||||
	}
 | 
			
		||||
 | 
			
		||||
	m.Lock.Lock()
 | 
			
		||||
	defer m.Lock.Unlock()
 | 
			
		||||
 | 
			
		||||
	if err, ok := m.DeleteError[*key]; ok {
 | 
			
		||||
		klog.V(5).Infof("MockBetaHealthChecks.Delete(%v, %v) = %v", ctx, key, err)
 | 
			
		||||
		return err
 | 
			
		||||
	}
 | 
			
		||||
	if _, ok := m.Objects[*key]; !ok {
 | 
			
		||||
		err := &googleapi.Error{
 | 
			
		||||
			Code:    http.StatusNotFound,
 | 
			
		||||
			Message: fmt.Sprintf("MockBetaHealthChecks %v not found", key),
 | 
			
		||||
		}
 | 
			
		||||
		klog.V(5).Infof("MockBetaHealthChecks.Delete(%v, %v) = %v", ctx, key, err)
 | 
			
		||||
		return err
 | 
			
		||||
	}
 | 
			
		||||
 | 
			
		||||
	delete(m.Objects, *key)
 | 
			
		||||
	klog.V(5).Infof("MockBetaHealthChecks.Delete(%v, %v) = nil", ctx, key)
 | 
			
		||||
	return nil
 | 
			
		||||
}
 | 
			
		||||
 | 
			
		||||
// Obj wraps the object for use in the mock.
 | 
			
		||||
func (m *MockBetaHealthChecks) Obj(o *beta.HealthCheck) *MockHealthChecksObj {
 | 
			
		||||
	return &MockHealthChecksObj{o}
 | 
			
		||||
}
 | 
			
		||||
 | 
			
		||||
// Update is a mock for the corresponding method.
 | 
			
		||||
func (m *MockBetaHealthChecks) Update(ctx context.Context, key *meta.Key, arg0 *beta.HealthCheck) error {
 | 
			
		||||
	if m.UpdateHook != nil {
 | 
			
		||||
		return m.UpdateHook(ctx, key, arg0, m)
 | 
			
		||||
	}
 | 
			
		||||
	return nil
 | 
			
		||||
}
 | 
			
		||||
 | 
			
		||||
// GCEBetaHealthChecks is a simplifying adapter for the GCE HealthChecks.
 | 
			
		||||
type GCEBetaHealthChecks struct {
 | 
			
		||||
	s *Service
 | 
			
		||||
}
 | 
			
		||||
 | 
			
		||||
// Get the HealthCheck named by key.
 | 
			
		||||
func (g *GCEBetaHealthChecks) Get(ctx context.Context, key *meta.Key) (*beta.HealthCheck, error) {
 | 
			
		||||
	klog.V(5).Infof("GCEBetaHealthChecks.Get(%v, %v): called", ctx, key)
 | 
			
		||||
 | 
			
		||||
	if !key.Valid() {
 | 
			
		||||
		klog.V(2).Infof("GCEBetaHealthChecks.Get(%v, %v): key is invalid (%#v)", ctx, key, key)
 | 
			
		||||
		return nil, fmt.Errorf("invalid GCE key (%#v)", key)
 | 
			
		||||
	}
 | 
			
		||||
	projectID := g.s.ProjectRouter.ProjectID(ctx, "beta", "HealthChecks")
 | 
			
		||||
	rk := &RateLimitKey{
 | 
			
		||||
		ProjectID: projectID,
 | 
			
		||||
		Operation: "Get",
 | 
			
		||||
		Version:   meta.Version("beta"),
 | 
			
		||||
		Service:   "HealthChecks",
 | 
			
		||||
	}
 | 
			
		||||
	klog.V(5).Infof("GCEBetaHealthChecks.Get(%v, %v): projectID = %v, rk = %+v", ctx, key, projectID, rk)
 | 
			
		||||
	if err := g.s.RateLimiter.Accept(ctx, rk); err != nil {
 | 
			
		||||
		klog.V(4).Infof("GCEBetaHealthChecks.Get(%v, %v): RateLimiter error: %v", ctx, key, err)
 | 
			
		||||
		return nil, err
 | 
			
		||||
	}
 | 
			
		||||
	call := g.s.Beta.HealthChecks.Get(projectID, key.Name)
 | 
			
		||||
	call.Context(ctx)
 | 
			
		||||
	v, err := call.Do()
 | 
			
		||||
	klog.V(4).Infof("GCEBetaHealthChecks.Get(%v, %v) = %+v, %v", ctx, key, v, err)
 | 
			
		||||
	return v, err
 | 
			
		||||
}
 | 
			
		||||
 | 
			
		||||
// List all HealthCheck objects.
 | 
			
		||||
func (g *GCEBetaHealthChecks) List(ctx context.Context, fl *filter.F) ([]*beta.HealthCheck, error) {
 | 
			
		||||
	klog.V(5).Infof("GCEBetaHealthChecks.List(%v, %v) called", ctx, fl)
 | 
			
		||||
	projectID := g.s.ProjectRouter.ProjectID(ctx, "beta", "HealthChecks")
 | 
			
		||||
	rk := &RateLimitKey{
 | 
			
		||||
		ProjectID: projectID,
 | 
			
		||||
		Operation: "List",
 | 
			
		||||
		Version:   meta.Version("beta"),
 | 
			
		||||
		Service:   "HealthChecks",
 | 
			
		||||
	}
 | 
			
		||||
	if err := g.s.RateLimiter.Accept(ctx, rk); err != nil {
 | 
			
		||||
		return nil, err
 | 
			
		||||
	}
 | 
			
		||||
	klog.V(5).Infof("GCEBetaHealthChecks.List(%v, %v): projectID = %v, rk = %+v", ctx, fl, projectID, rk)
 | 
			
		||||
	call := g.s.Beta.HealthChecks.List(projectID)
 | 
			
		||||
	if fl != filter.None {
 | 
			
		||||
		call.Filter(fl.String())
 | 
			
		||||
	}
 | 
			
		||||
	var all []*beta.HealthCheck
 | 
			
		||||
	f := func(l *beta.HealthCheckList) error {
 | 
			
		||||
		klog.V(5).Infof("GCEBetaHealthChecks.List(%v, ..., %v): page %+v", ctx, fl, l)
 | 
			
		||||
		all = append(all, l.Items...)
 | 
			
		||||
		return nil
 | 
			
		||||
	}
 | 
			
		||||
	if err := call.Pages(ctx, f); err != nil {
 | 
			
		||||
		klog.V(4).Infof("GCEBetaHealthChecks.List(%v, ..., %v) = %v, %v", ctx, fl, nil, err)
 | 
			
		||||
		return nil, err
 | 
			
		||||
	}
 | 
			
		||||
 | 
			
		||||
	if klog.V(4) {
 | 
			
		||||
		klog.V(4).Infof("GCEBetaHealthChecks.List(%v, ..., %v) = [%v items], %v", ctx, fl, len(all), nil)
 | 
			
		||||
	} else if klog.V(5) {
 | 
			
		||||
		var asStr []string
 | 
			
		||||
		for _, o := range all {
 | 
			
		||||
			asStr = append(asStr, fmt.Sprintf("%+v", o))
 | 
			
		||||
		}
 | 
			
		||||
		klog.V(5).Infof("GCEBetaHealthChecks.List(%v, ..., %v) = %v, %v", ctx, fl, asStr, nil)
 | 
			
		||||
	}
 | 
			
		||||
 | 
			
		||||
	return all, nil
 | 
			
		||||
}
 | 
			
		||||
 | 
			
		||||
// Insert HealthCheck with key of value obj.
 | 
			
		||||
func (g *GCEBetaHealthChecks) Insert(ctx context.Context, key *meta.Key, obj *beta.HealthCheck) error {
 | 
			
		||||
	klog.V(5).Infof("GCEBetaHealthChecks.Insert(%v, %v, %+v): called", ctx, key, obj)
 | 
			
		||||
	if !key.Valid() {
 | 
			
		||||
		klog.V(2).Infof("GCEBetaHealthChecks.Insert(%v, %v, ...): key is invalid (%#v)", ctx, key, key)
 | 
			
		||||
		return fmt.Errorf("invalid GCE key (%+v)", key)
 | 
			
		||||
	}
 | 
			
		||||
	projectID := g.s.ProjectRouter.ProjectID(ctx, "beta", "HealthChecks")
 | 
			
		||||
	rk := &RateLimitKey{
 | 
			
		||||
		ProjectID: projectID,
 | 
			
		||||
		Operation: "Insert",
 | 
			
		||||
		Version:   meta.Version("beta"),
 | 
			
		||||
		Service:   "HealthChecks",
 | 
			
		||||
	}
 | 
			
		||||
	klog.V(5).Infof("GCEBetaHealthChecks.Insert(%v, %v, ...): projectID = %v, rk = %+v", ctx, key, projectID, rk)
 | 
			
		||||
	if err := g.s.RateLimiter.Accept(ctx, rk); err != nil {
 | 
			
		||||
		klog.V(4).Infof("GCEBetaHealthChecks.Insert(%v, %v, ...): RateLimiter error: %v", ctx, key, err)
 | 
			
		||||
		return err
 | 
			
		||||
	}
 | 
			
		||||
	obj.Name = key.Name
 | 
			
		||||
	call := g.s.Beta.HealthChecks.Insert(projectID, obj)
 | 
			
		||||
	call.Context(ctx)
 | 
			
		||||
 | 
			
		||||
	op, err := call.Do()
 | 
			
		||||
	if err != nil {
 | 
			
		||||
		klog.V(4).Infof("GCEBetaHealthChecks.Insert(%v, %v, ...) = %+v", ctx, key, err)
 | 
			
		||||
		return err
 | 
			
		||||
	}
 | 
			
		||||
 | 
			
		||||
	err = g.s.WaitForCompletion(ctx, op)
 | 
			
		||||
	klog.V(4).Infof("GCEBetaHealthChecks.Insert(%v, %v, %+v) = %+v", ctx, key, obj, err)
 | 
			
		||||
	return err
 | 
			
		||||
}
 | 
			
		||||
 | 
			
		||||
// Delete the HealthCheck referenced by key.
 | 
			
		||||
func (g *GCEBetaHealthChecks) Delete(ctx context.Context, key *meta.Key) error {
 | 
			
		||||
	klog.V(5).Infof("GCEBetaHealthChecks.Delete(%v, %v): called", ctx, key)
 | 
			
		||||
	if !key.Valid() {
 | 
			
		||||
		klog.V(2).Infof("GCEBetaHealthChecks.Delete(%v, %v): key is invalid (%#v)", ctx, key, key)
 | 
			
		||||
		return fmt.Errorf("invalid GCE key (%+v)", key)
 | 
			
		||||
	}
 | 
			
		||||
	projectID := g.s.ProjectRouter.ProjectID(ctx, "beta", "HealthChecks")
 | 
			
		||||
	rk := &RateLimitKey{
 | 
			
		||||
		ProjectID: projectID,
 | 
			
		||||
		Operation: "Delete",
 | 
			
		||||
		Version:   meta.Version("beta"),
 | 
			
		||||
		Service:   "HealthChecks",
 | 
			
		||||
	}
 | 
			
		||||
	klog.V(5).Infof("GCEBetaHealthChecks.Delete(%v, %v): projectID = %v, rk = %+v", ctx, key, projectID, rk)
 | 
			
		||||
	if err := g.s.RateLimiter.Accept(ctx, rk); err != nil {
 | 
			
		||||
		klog.V(4).Infof("GCEBetaHealthChecks.Delete(%v, %v): RateLimiter error: %v", ctx, key, err)
 | 
			
		||||
		return err
 | 
			
		||||
	}
 | 
			
		||||
	call := g.s.Beta.HealthChecks.Delete(projectID, key.Name)
 | 
			
		||||
 | 
			
		||||
	call.Context(ctx)
 | 
			
		||||
 | 
			
		||||
	op, err := call.Do()
 | 
			
		||||
	if err != nil {
 | 
			
		||||
		klog.V(4).Infof("GCEBetaHealthChecks.Delete(%v, %v) = %v", ctx, key, err)
 | 
			
		||||
		return err
 | 
			
		||||
	}
 | 
			
		||||
 | 
			
		||||
	err = g.s.WaitForCompletion(ctx, op)
 | 
			
		||||
	klog.V(4).Infof("GCEBetaHealthChecks.Delete(%v, %v) = %v", ctx, key, err)
 | 
			
		||||
	return err
 | 
			
		||||
}
 | 
			
		||||
 | 
			
		||||
// Update is a method on GCEBetaHealthChecks.
 | 
			
		||||
func (g *GCEBetaHealthChecks) Update(ctx context.Context, key *meta.Key, arg0 *beta.HealthCheck) error {
 | 
			
		||||
	klog.V(5).Infof("GCEBetaHealthChecks.Update(%v, %v, ...): called", ctx, key)
 | 
			
		||||
 | 
			
		||||
	if !key.Valid() {
 | 
			
		||||
		klog.V(2).Infof("GCEBetaHealthChecks.Update(%v, %v, ...): key is invalid (%#v)", ctx, key, key)
 | 
			
		||||
		return fmt.Errorf("invalid GCE key (%+v)", key)
 | 
			
		||||
	}
 | 
			
		||||
	projectID := g.s.ProjectRouter.ProjectID(ctx, "beta", "HealthChecks")
 | 
			
		||||
	rk := &RateLimitKey{
 | 
			
		||||
		ProjectID: projectID,
 | 
			
		||||
		Operation: "Update",
 | 
			
		||||
		Version:   meta.Version("beta"),
 | 
			
		||||
		Service:   "HealthChecks",
 | 
			
		||||
	}
 | 
			
		||||
	klog.V(5).Infof("GCEBetaHealthChecks.Update(%v, %v, ...): projectID = %v, rk = %+v", ctx, key, projectID, rk)
 | 
			
		||||
 | 
			
		||||
	if err := g.s.RateLimiter.Accept(ctx, rk); err != nil {
 | 
			
		||||
		klog.V(4).Infof("GCEBetaHealthChecks.Update(%v, %v, ...): RateLimiter error: %v", ctx, key, err)
 | 
			
		||||
		return err
 | 
			
		||||
	}
 | 
			
		||||
	call := g.s.Beta.HealthChecks.Update(projectID, key.Name, arg0)
 | 
			
		||||
	call.Context(ctx)
 | 
			
		||||
	op, err := call.Do()
 | 
			
		||||
	if err != nil {
 | 
			
		||||
		klog.V(4).Infof("GCEBetaHealthChecks.Update(%v, %v, ...) = %+v", ctx, key, err)
 | 
			
		||||
		return err
 | 
			
		||||
	}
 | 
			
		||||
	err = g.s.WaitForCompletion(ctx, op)
 | 
			
		||||
	klog.V(4).Infof("GCEBetaHealthChecks.Update(%v, %v, ...) = %+v", ctx, key, err)
 | 
			
		||||
	return err
 | 
			
		||||
}
 | 
			
		||||
 | 
			
		||||
// AlphaHealthChecks is an interface that allows for mocking of HealthChecks.
 | 
			
		||||
type AlphaHealthChecks interface {
 | 
			
		||||
	Get(ctx context.Context, key *meta.Key) (*alpha.HealthCheck, error)
 | 
			
		||||
@@ -8030,6 +7655,381 @@ func (g *GCEAlphaHealthChecks) Update(ctx context.Context, key *meta.Key, arg0 *
 | 
			
		||||
	return err
 | 
			
		||||
}
 | 
			
		||||
 | 
			
		||||
// BetaHealthChecks is an interface that allows for mocking of HealthChecks.
 | 
			
		||||
type BetaHealthChecks interface {
 | 
			
		||||
	Get(ctx context.Context, key *meta.Key) (*beta.HealthCheck, error)
 | 
			
		||||
	List(ctx context.Context, fl *filter.F) ([]*beta.HealthCheck, error)
 | 
			
		||||
	Insert(ctx context.Context, key *meta.Key, obj *beta.HealthCheck) error
 | 
			
		||||
	Delete(ctx context.Context, key *meta.Key) error
 | 
			
		||||
	Update(context.Context, *meta.Key, *beta.HealthCheck) error
 | 
			
		||||
}
 | 
			
		||||
 | 
			
		||||
// NewMockBetaHealthChecks returns a new mock for HealthChecks.
 | 
			
		||||
func NewMockBetaHealthChecks(pr ProjectRouter, objs map[meta.Key]*MockHealthChecksObj) *MockBetaHealthChecks {
 | 
			
		||||
	mock := &MockBetaHealthChecks{
 | 
			
		||||
		ProjectRouter: pr,
 | 
			
		||||
 | 
			
		||||
		Objects:     objs,
 | 
			
		||||
		GetError:    map[meta.Key]error{},
 | 
			
		||||
		InsertError: map[meta.Key]error{},
 | 
			
		||||
		DeleteError: map[meta.Key]error{},
 | 
			
		||||
	}
 | 
			
		||||
	return mock
 | 
			
		||||
}
 | 
			
		||||
 | 
			
		||||
// MockBetaHealthChecks is the mock for HealthChecks.
 | 
			
		||||
type MockBetaHealthChecks struct {
 | 
			
		||||
	Lock sync.Mutex
 | 
			
		||||
 | 
			
		||||
	ProjectRouter ProjectRouter
 | 
			
		||||
 | 
			
		||||
	// Objects maintained by the mock.
 | 
			
		||||
	Objects map[meta.Key]*MockHealthChecksObj
 | 
			
		||||
 | 
			
		||||
	// If an entry exists for the given key and operation, then the error
 | 
			
		||||
	// will be returned instead of the operation.
 | 
			
		||||
	GetError    map[meta.Key]error
 | 
			
		||||
	ListError   *error
 | 
			
		||||
	InsertError map[meta.Key]error
 | 
			
		||||
	DeleteError map[meta.Key]error
 | 
			
		||||
 | 
			
		||||
	// xxxHook allow you to intercept the standard processing of the mock in
 | 
			
		||||
	// order to add your own logic. Return (true, _, _) to prevent the normal
 | 
			
		||||
	// execution flow of the mock. Return (false, nil, nil) to continue with
 | 
			
		||||
	// normal mock behavior/ after the hook function executes.
 | 
			
		||||
	GetHook    func(ctx context.Context, key *meta.Key, m *MockBetaHealthChecks) (bool, *beta.HealthCheck, error)
 | 
			
		||||
	ListHook   func(ctx context.Context, fl *filter.F, m *MockBetaHealthChecks) (bool, []*beta.HealthCheck, error)
 | 
			
		||||
	InsertHook func(ctx context.Context, key *meta.Key, obj *beta.HealthCheck, m *MockBetaHealthChecks) (bool, error)
 | 
			
		||||
	DeleteHook func(ctx context.Context, key *meta.Key, m *MockBetaHealthChecks) (bool, error)
 | 
			
		||||
	UpdateHook func(context.Context, *meta.Key, *beta.HealthCheck, *MockBetaHealthChecks) error
 | 
			
		||||
 | 
			
		||||
	// X is extra state that can be used as part of the mock. Generated code
 | 
			
		||||
	// will not use this field.
 | 
			
		||||
	X interface{}
 | 
			
		||||
}
 | 
			
		||||
 | 
			
		||||
// Get returns the object from the mock.
 | 
			
		||||
func (m *MockBetaHealthChecks) Get(ctx context.Context, key *meta.Key) (*beta.HealthCheck, error) {
 | 
			
		||||
	if m.GetHook != nil {
 | 
			
		||||
		if intercept, obj, err := m.GetHook(ctx, key, m); intercept {
 | 
			
		||||
			klog.V(5).Infof("MockBetaHealthChecks.Get(%v, %s) = %+v, %v", ctx, key, obj, err)
 | 
			
		||||
			return obj, err
 | 
			
		||||
		}
 | 
			
		||||
	}
 | 
			
		||||
	if !key.Valid() {
 | 
			
		||||
		return nil, fmt.Errorf("invalid GCE key (%+v)", key)
 | 
			
		||||
	}
 | 
			
		||||
 | 
			
		||||
	m.Lock.Lock()
 | 
			
		||||
	defer m.Lock.Unlock()
 | 
			
		||||
 | 
			
		||||
	if err, ok := m.GetError[*key]; ok {
 | 
			
		||||
		klog.V(5).Infof("MockBetaHealthChecks.Get(%v, %s) = nil, %v", ctx, key, err)
 | 
			
		||||
		return nil, err
 | 
			
		||||
	}
 | 
			
		||||
	if obj, ok := m.Objects[*key]; ok {
 | 
			
		||||
		typedObj := obj.ToBeta()
 | 
			
		||||
		klog.V(5).Infof("MockBetaHealthChecks.Get(%v, %s) = %+v, nil", ctx, key, typedObj)
 | 
			
		||||
		return typedObj, nil
 | 
			
		||||
	}
 | 
			
		||||
 | 
			
		||||
	err := &googleapi.Error{
 | 
			
		||||
		Code:    http.StatusNotFound,
 | 
			
		||||
		Message: fmt.Sprintf("MockBetaHealthChecks %v not found", key),
 | 
			
		||||
	}
 | 
			
		||||
	klog.V(5).Infof("MockBetaHealthChecks.Get(%v, %s) = nil, %v", ctx, key, err)
 | 
			
		||||
	return nil, err
 | 
			
		||||
}
 | 
			
		||||
 | 
			
		||||
// List all of the objects in the mock.
 | 
			
		||||
func (m *MockBetaHealthChecks) List(ctx context.Context, fl *filter.F) ([]*beta.HealthCheck, error) {
 | 
			
		||||
	if m.ListHook != nil {
 | 
			
		||||
		if intercept, objs, err := m.ListHook(ctx, fl, m); intercept {
 | 
			
		||||
			klog.V(5).Infof("MockBetaHealthChecks.List(%v, %v) = [%v items], %v", ctx, fl, len(objs), err)
 | 
			
		||||
			return objs, err
 | 
			
		||||
		}
 | 
			
		||||
	}
 | 
			
		||||
 | 
			
		||||
	m.Lock.Lock()
 | 
			
		||||
	defer m.Lock.Unlock()
 | 
			
		||||
 | 
			
		||||
	if m.ListError != nil {
 | 
			
		||||
		err := *m.ListError
 | 
			
		||||
		klog.V(5).Infof("MockBetaHealthChecks.List(%v, %v) = nil, %v", ctx, fl, err)
 | 
			
		||||
 | 
			
		||||
		return nil, *m.ListError
 | 
			
		||||
	}
 | 
			
		||||
 | 
			
		||||
	var objs []*beta.HealthCheck
 | 
			
		||||
	for _, obj := range m.Objects {
 | 
			
		||||
		if !fl.Match(obj.ToBeta()) {
 | 
			
		||||
			continue
 | 
			
		||||
		}
 | 
			
		||||
		objs = append(objs, obj.ToBeta())
 | 
			
		||||
	}
 | 
			
		||||
 | 
			
		||||
	klog.V(5).Infof("MockBetaHealthChecks.List(%v, %v) = [%v items], nil", ctx, fl, len(objs))
 | 
			
		||||
	return objs, nil
 | 
			
		||||
}
 | 
			
		||||
 | 
			
		||||
// Insert is a mock for inserting/creating a new object.
 | 
			
		||||
func (m *MockBetaHealthChecks) Insert(ctx context.Context, key *meta.Key, obj *beta.HealthCheck) error {
 | 
			
		||||
	if m.InsertHook != nil {
 | 
			
		||||
		if intercept, err := m.InsertHook(ctx, key, obj, m); intercept {
 | 
			
		||||
			klog.V(5).Infof("MockBetaHealthChecks.Insert(%v, %v, %+v) = %v", ctx, key, obj, err)
 | 
			
		||||
			return err
 | 
			
		||||
		}
 | 
			
		||||
	}
 | 
			
		||||
	if !key.Valid() {
 | 
			
		||||
		return fmt.Errorf("invalid GCE key (%+v)", key)
 | 
			
		||||
	}
 | 
			
		||||
 | 
			
		||||
	m.Lock.Lock()
 | 
			
		||||
	defer m.Lock.Unlock()
 | 
			
		||||
 | 
			
		||||
	if err, ok := m.InsertError[*key]; ok {
 | 
			
		||||
		klog.V(5).Infof("MockBetaHealthChecks.Insert(%v, %v, %+v) = %v", ctx, key, obj, err)
 | 
			
		||||
		return err
 | 
			
		||||
	}
 | 
			
		||||
	if _, ok := m.Objects[*key]; ok {
 | 
			
		||||
		err := &googleapi.Error{
 | 
			
		||||
			Code:    http.StatusConflict,
 | 
			
		||||
			Message: fmt.Sprintf("MockBetaHealthChecks %v exists", key),
 | 
			
		||||
		}
 | 
			
		||||
		klog.V(5).Infof("MockBetaHealthChecks.Insert(%v, %v, %+v) = %v", ctx, key, obj, err)
 | 
			
		||||
		return err
 | 
			
		||||
	}
 | 
			
		||||
 | 
			
		||||
	obj.Name = key.Name
 | 
			
		||||
	projectID := m.ProjectRouter.ProjectID(ctx, "beta", "healthChecks")
 | 
			
		||||
	obj.SelfLink = SelfLink(meta.VersionBeta, projectID, "healthChecks", key)
 | 
			
		||||
 | 
			
		||||
	m.Objects[*key] = &MockHealthChecksObj{obj}
 | 
			
		||||
	klog.V(5).Infof("MockBetaHealthChecks.Insert(%v, %v, %+v) = nil", ctx, key, obj)
 | 
			
		||||
	return nil
 | 
			
		||||
}
 | 
			
		||||
 | 
			
		||||
// Delete is a mock for deleting the object.
 | 
			
		||||
func (m *MockBetaHealthChecks) Delete(ctx context.Context, key *meta.Key) error {
 | 
			
		||||
	if m.DeleteHook != nil {
 | 
			
		||||
		if intercept, err := m.DeleteHook(ctx, key, m); intercept {
 | 
			
		||||
			klog.V(5).Infof("MockBetaHealthChecks.Delete(%v, %v) = %v", ctx, key, err)
 | 
			
		||||
			return err
 | 
			
		||||
		}
 | 
			
		||||
	}
 | 
			
		||||
	if !key.Valid() {
 | 
			
		||||
		return fmt.Errorf("invalid GCE key (%+v)", key)
 | 
			
		||||
	}
 | 
			
		||||
 | 
			
		||||
	m.Lock.Lock()
 | 
			
		||||
	defer m.Lock.Unlock()
 | 
			
		||||
 | 
			
		||||
	if err, ok := m.DeleteError[*key]; ok {
 | 
			
		||||
		klog.V(5).Infof("MockBetaHealthChecks.Delete(%v, %v) = %v", ctx, key, err)
 | 
			
		||||
		return err
 | 
			
		||||
	}
 | 
			
		||||
	if _, ok := m.Objects[*key]; !ok {
 | 
			
		||||
		err := &googleapi.Error{
 | 
			
		||||
			Code:    http.StatusNotFound,
 | 
			
		||||
			Message: fmt.Sprintf("MockBetaHealthChecks %v not found", key),
 | 
			
		||||
		}
 | 
			
		||||
		klog.V(5).Infof("MockBetaHealthChecks.Delete(%v, %v) = %v", ctx, key, err)
 | 
			
		||||
		return err
 | 
			
		||||
	}
 | 
			
		||||
 | 
			
		||||
	delete(m.Objects, *key)
 | 
			
		||||
	klog.V(5).Infof("MockBetaHealthChecks.Delete(%v, %v) = nil", ctx, key)
 | 
			
		||||
	return nil
 | 
			
		||||
}
 | 
			
		||||
 | 
			
		||||
// Obj wraps the object for use in the mock.
 | 
			
		||||
func (m *MockBetaHealthChecks) Obj(o *beta.HealthCheck) *MockHealthChecksObj {
 | 
			
		||||
	return &MockHealthChecksObj{o}
 | 
			
		||||
}
 | 
			
		||||
 | 
			
		||||
// Update is a mock for the corresponding method.
 | 
			
		||||
func (m *MockBetaHealthChecks) Update(ctx context.Context, key *meta.Key, arg0 *beta.HealthCheck) error {
 | 
			
		||||
	if m.UpdateHook != nil {
 | 
			
		||||
		return m.UpdateHook(ctx, key, arg0, m)
 | 
			
		||||
	}
 | 
			
		||||
	return nil
 | 
			
		||||
}
 | 
			
		||||
 | 
			
		||||
// GCEBetaHealthChecks is a simplifying adapter for the GCE HealthChecks.
 | 
			
		||||
type GCEBetaHealthChecks struct {
 | 
			
		||||
	s *Service
 | 
			
		||||
}
 | 
			
		||||
 | 
			
		||||
// Get the HealthCheck named by key.
 | 
			
		||||
func (g *GCEBetaHealthChecks) Get(ctx context.Context, key *meta.Key) (*beta.HealthCheck, error) {
 | 
			
		||||
	klog.V(5).Infof("GCEBetaHealthChecks.Get(%v, %v): called", ctx, key)
 | 
			
		||||
 | 
			
		||||
	if !key.Valid() {
 | 
			
		||||
		klog.V(2).Infof("GCEBetaHealthChecks.Get(%v, %v): key is invalid (%#v)", ctx, key, key)
 | 
			
		||||
		return nil, fmt.Errorf("invalid GCE key (%#v)", key)
 | 
			
		||||
	}
 | 
			
		||||
	projectID := g.s.ProjectRouter.ProjectID(ctx, "beta", "HealthChecks")
 | 
			
		||||
	rk := &RateLimitKey{
 | 
			
		||||
		ProjectID: projectID,
 | 
			
		||||
		Operation: "Get",
 | 
			
		||||
		Version:   meta.Version("beta"),
 | 
			
		||||
		Service:   "HealthChecks",
 | 
			
		||||
	}
 | 
			
		||||
	klog.V(5).Infof("GCEBetaHealthChecks.Get(%v, %v): projectID = %v, rk = %+v", ctx, key, projectID, rk)
 | 
			
		||||
	if err := g.s.RateLimiter.Accept(ctx, rk); err != nil {
 | 
			
		||||
		klog.V(4).Infof("GCEBetaHealthChecks.Get(%v, %v): RateLimiter error: %v", ctx, key, err)
 | 
			
		||||
		return nil, err
 | 
			
		||||
	}
 | 
			
		||||
	call := g.s.Beta.HealthChecks.Get(projectID, key.Name)
 | 
			
		||||
	call.Context(ctx)
 | 
			
		||||
	v, err := call.Do()
 | 
			
		||||
	klog.V(4).Infof("GCEBetaHealthChecks.Get(%v, %v) = %+v, %v", ctx, key, v, err)
 | 
			
		||||
	return v, err
 | 
			
		||||
}
 | 
			
		||||
 | 
			
		||||
// List all HealthCheck objects.
 | 
			
		||||
func (g *GCEBetaHealthChecks) List(ctx context.Context, fl *filter.F) ([]*beta.HealthCheck, error) {
 | 
			
		||||
	klog.V(5).Infof("GCEBetaHealthChecks.List(%v, %v) called", ctx, fl)
 | 
			
		||||
	projectID := g.s.ProjectRouter.ProjectID(ctx, "beta", "HealthChecks")
 | 
			
		||||
	rk := &RateLimitKey{
 | 
			
		||||
		ProjectID: projectID,
 | 
			
		||||
		Operation: "List",
 | 
			
		||||
		Version:   meta.Version("beta"),
 | 
			
		||||
		Service:   "HealthChecks",
 | 
			
		||||
	}
 | 
			
		||||
	if err := g.s.RateLimiter.Accept(ctx, rk); err != nil {
 | 
			
		||||
		return nil, err
 | 
			
		||||
	}
 | 
			
		||||
	klog.V(5).Infof("GCEBetaHealthChecks.List(%v, %v): projectID = %v, rk = %+v", ctx, fl, projectID, rk)
 | 
			
		||||
	call := g.s.Beta.HealthChecks.List(projectID)
 | 
			
		||||
	if fl != filter.None {
 | 
			
		||||
		call.Filter(fl.String())
 | 
			
		||||
	}
 | 
			
		||||
	var all []*beta.HealthCheck
 | 
			
		||||
	f := func(l *beta.HealthCheckList) error {
 | 
			
		||||
		klog.V(5).Infof("GCEBetaHealthChecks.List(%v, ..., %v): page %+v", ctx, fl, l)
 | 
			
		||||
		all = append(all, l.Items...)
 | 
			
		||||
		return nil
 | 
			
		||||
	}
 | 
			
		||||
	if err := call.Pages(ctx, f); err != nil {
 | 
			
		||||
		klog.V(4).Infof("GCEBetaHealthChecks.List(%v, ..., %v) = %v, %v", ctx, fl, nil, err)
 | 
			
		||||
		return nil, err
 | 
			
		||||
	}
 | 
			
		||||
 | 
			
		||||
	if klog.V(4) {
 | 
			
		||||
		klog.V(4).Infof("GCEBetaHealthChecks.List(%v, ..., %v) = [%v items], %v", ctx, fl, len(all), nil)
 | 
			
		||||
	} else if klog.V(5) {
 | 
			
		||||
		var asStr []string
 | 
			
		||||
		for _, o := range all {
 | 
			
		||||
			asStr = append(asStr, fmt.Sprintf("%+v", o))
 | 
			
		||||
		}
 | 
			
		||||
		klog.V(5).Infof("GCEBetaHealthChecks.List(%v, ..., %v) = %v, %v", ctx, fl, asStr, nil)
 | 
			
		||||
	}
 | 
			
		||||
 | 
			
		||||
	return all, nil
 | 
			
		||||
}
 | 
			
		||||
 | 
			
		||||
// Insert HealthCheck with key of value obj.
 | 
			
		||||
func (g *GCEBetaHealthChecks) Insert(ctx context.Context, key *meta.Key, obj *beta.HealthCheck) error {
 | 
			
		||||
	klog.V(5).Infof("GCEBetaHealthChecks.Insert(%v, %v, %+v): called", ctx, key, obj)
 | 
			
		||||
	if !key.Valid() {
 | 
			
		||||
		klog.V(2).Infof("GCEBetaHealthChecks.Insert(%v, %v, ...): key is invalid (%#v)", ctx, key, key)
 | 
			
		||||
		return fmt.Errorf("invalid GCE key (%+v)", key)
 | 
			
		||||
	}
 | 
			
		||||
	projectID := g.s.ProjectRouter.ProjectID(ctx, "beta", "HealthChecks")
 | 
			
		||||
	rk := &RateLimitKey{
 | 
			
		||||
		ProjectID: projectID,
 | 
			
		||||
		Operation: "Insert",
 | 
			
		||||
		Version:   meta.Version("beta"),
 | 
			
		||||
		Service:   "HealthChecks",
 | 
			
		||||
	}
 | 
			
		||||
	klog.V(5).Infof("GCEBetaHealthChecks.Insert(%v, %v, ...): projectID = %v, rk = %+v", ctx, key, projectID, rk)
 | 
			
		||||
	if err := g.s.RateLimiter.Accept(ctx, rk); err != nil {
 | 
			
		||||
		klog.V(4).Infof("GCEBetaHealthChecks.Insert(%v, %v, ...): RateLimiter error: %v", ctx, key, err)
 | 
			
		||||
		return err
 | 
			
		||||
	}
 | 
			
		||||
	obj.Name = key.Name
 | 
			
		||||
	call := g.s.Beta.HealthChecks.Insert(projectID, obj)
 | 
			
		||||
	call.Context(ctx)
 | 
			
		||||
 | 
			
		||||
	op, err := call.Do()
 | 
			
		||||
	if err != nil {
 | 
			
		||||
		klog.V(4).Infof("GCEBetaHealthChecks.Insert(%v, %v, ...) = %+v", ctx, key, err)
 | 
			
		||||
		return err
 | 
			
		||||
	}
 | 
			
		||||
 | 
			
		||||
	err = g.s.WaitForCompletion(ctx, op)
 | 
			
		||||
	klog.V(4).Infof("GCEBetaHealthChecks.Insert(%v, %v, %+v) = %+v", ctx, key, obj, err)
 | 
			
		||||
	return err
 | 
			
		||||
}
 | 
			
		||||
 | 
			
		||||
// Delete the HealthCheck referenced by key.
 | 
			
		||||
func (g *GCEBetaHealthChecks) Delete(ctx context.Context, key *meta.Key) error {
 | 
			
		||||
	klog.V(5).Infof("GCEBetaHealthChecks.Delete(%v, %v): called", ctx, key)
 | 
			
		||||
	if !key.Valid() {
 | 
			
		||||
		klog.V(2).Infof("GCEBetaHealthChecks.Delete(%v, %v): key is invalid (%#v)", ctx, key, key)
 | 
			
		||||
		return fmt.Errorf("invalid GCE key (%+v)", key)
 | 
			
		||||
	}
 | 
			
		||||
	projectID := g.s.ProjectRouter.ProjectID(ctx, "beta", "HealthChecks")
 | 
			
		||||
	rk := &RateLimitKey{
 | 
			
		||||
		ProjectID: projectID,
 | 
			
		||||
		Operation: "Delete",
 | 
			
		||||
		Version:   meta.Version("beta"),
 | 
			
		||||
		Service:   "HealthChecks",
 | 
			
		||||
	}
 | 
			
		||||
	klog.V(5).Infof("GCEBetaHealthChecks.Delete(%v, %v): projectID = %v, rk = %+v", ctx, key, projectID, rk)
 | 
			
		||||
	if err := g.s.RateLimiter.Accept(ctx, rk); err != nil {
 | 
			
		||||
		klog.V(4).Infof("GCEBetaHealthChecks.Delete(%v, %v): RateLimiter error: %v", ctx, key, err)
 | 
			
		||||
		return err
 | 
			
		||||
	}
 | 
			
		||||
	call := g.s.Beta.HealthChecks.Delete(projectID, key.Name)
 | 
			
		||||
 | 
			
		||||
	call.Context(ctx)
 | 
			
		||||
 | 
			
		||||
	op, err := call.Do()
 | 
			
		||||
	if err != nil {
 | 
			
		||||
		klog.V(4).Infof("GCEBetaHealthChecks.Delete(%v, %v) = %v", ctx, key, err)
 | 
			
		||||
		return err
 | 
			
		||||
	}
 | 
			
		||||
 | 
			
		||||
	err = g.s.WaitForCompletion(ctx, op)
 | 
			
		||||
	klog.V(4).Infof("GCEBetaHealthChecks.Delete(%v, %v) = %v", ctx, key, err)
 | 
			
		||||
	return err
 | 
			
		||||
}
 | 
			
		||||
 | 
			
		||||
// Update is a method on GCEBetaHealthChecks.
 | 
			
		||||
func (g *GCEBetaHealthChecks) Update(ctx context.Context, key *meta.Key, arg0 *beta.HealthCheck) error {
 | 
			
		||||
	klog.V(5).Infof("GCEBetaHealthChecks.Update(%v, %v, ...): called", ctx, key)
 | 
			
		||||
 | 
			
		||||
	if !key.Valid() {
 | 
			
		||||
		klog.V(2).Infof("GCEBetaHealthChecks.Update(%v, %v, ...): key is invalid (%#v)", ctx, key, key)
 | 
			
		||||
		return fmt.Errorf("invalid GCE key (%+v)", key)
 | 
			
		||||
	}
 | 
			
		||||
	projectID := g.s.ProjectRouter.ProjectID(ctx, "beta", "HealthChecks")
 | 
			
		||||
	rk := &RateLimitKey{
 | 
			
		||||
		ProjectID: projectID,
 | 
			
		||||
		Operation: "Update",
 | 
			
		||||
		Version:   meta.Version("beta"),
 | 
			
		||||
		Service:   "HealthChecks",
 | 
			
		||||
	}
 | 
			
		||||
	klog.V(5).Infof("GCEBetaHealthChecks.Update(%v, %v, ...): projectID = %v, rk = %+v", ctx, key, projectID, rk)
 | 
			
		||||
 | 
			
		||||
	if err := g.s.RateLimiter.Accept(ctx, rk); err != nil {
 | 
			
		||||
		klog.V(4).Infof("GCEBetaHealthChecks.Update(%v, %v, ...): RateLimiter error: %v", ctx, key, err)
 | 
			
		||||
		return err
 | 
			
		||||
	}
 | 
			
		||||
	call := g.s.Beta.HealthChecks.Update(projectID, key.Name, arg0)
 | 
			
		||||
	call.Context(ctx)
 | 
			
		||||
	op, err := call.Do()
 | 
			
		||||
	if err != nil {
 | 
			
		||||
		klog.V(4).Infof("GCEBetaHealthChecks.Update(%v, %v, ...) = %+v", ctx, key, err)
 | 
			
		||||
		return err
 | 
			
		||||
	}
 | 
			
		||||
	err = g.s.WaitForCompletion(ctx, op)
 | 
			
		||||
	klog.V(4).Infof("GCEBetaHealthChecks.Update(%v, %v, ...) = %+v", ctx, key, err)
 | 
			
		||||
	return err
 | 
			
		||||
}
 | 
			
		||||
 | 
			
		||||
// HttpHealthChecks is an interface that allows for mocking of HttpHealthChecks.
 | 
			
		||||
type HttpHealthChecks interface {
 | 
			
		||||
	Get(ctx context.Context, key *meta.Key) (*ga.HttpHealthCheck, error)
 | 
			
		||||
							
								
								
									
										13
									
								
								vendor/github.com/GoogleCloudPlatform/k8s-cloud-provider/pkg/cloud/gen/BUILD
									
									
									
										generated
									
									
										vendored
									
									
										Normal file
									
								
							
							
						
						
									
										13
									
								
								vendor/github.com/GoogleCloudPlatform/k8s-cloud-provider/pkg/cloud/gen/BUILD
									
									
									
										generated
									
									
										vendored
									
									
										Normal file
									
								
							@@ -0,0 +1,13 @@
 | 
			
		||||
filegroup(
 | 
			
		||||
    name = "package-srcs",
 | 
			
		||||
    srcs = glob(["**"]),
 | 
			
		||||
    tags = ["automanaged"],
 | 
			
		||||
    visibility = ["//visibility:private"],
 | 
			
		||||
)
 | 
			
		||||
 | 
			
		||||
filegroup(
 | 
			
		||||
    name = "all-srcs",
 | 
			
		||||
    srcs = [":package-srcs"],
 | 
			
		||||
    tags = ["automanaged"],
 | 
			
		||||
    visibility = ["//visibility:public"],
 | 
			
		||||
)
 | 
			
		||||
@@ -1,4 +1,4 @@
 | 
			
		||||
load("@io_bazel_rules_go//go:def.bzl", "go_library", "go_test")
 | 
			
		||||
load("@io_bazel_rules_go//go:def.bzl", "go_library")
 | 
			
		||||
 | 
			
		||||
go_library(
 | 
			
		||||
    name = "go_default_library",
 | 
			
		||||
@@ -9,7 +9,8 @@ go_library(
 | 
			
		||||
        "method.go",
 | 
			
		||||
        "service.go",
 | 
			
		||||
    ],
 | 
			
		||||
    importpath = "k8s.io/kubernetes/pkg/cloudprovider/providers/gce/cloud/meta",
 | 
			
		||||
    importmap = "k8s.io/kubernetes/vendor/github.com/GoogleCloudPlatform/k8s-cloud-provider/pkg/cloud/meta",
 | 
			
		||||
    importpath = "github.com/GoogleCloudPlatform/k8s-cloud-provider/pkg/cloud/meta",
 | 
			
		||||
    visibility = ["//visibility:public"],
 | 
			
		||||
    deps = [
 | 
			
		||||
        "//vendor/google.golang.org/api/compute/v0.alpha:go_default_library",
 | 
			
		||||
@@ -18,12 +19,6 @@ go_library(
 | 
			
		||||
    ],
 | 
			
		||||
)
 | 
			
		||||
 | 
			
		||||
go_test(
 | 
			
		||||
    name = "go_default_test",
 | 
			
		||||
    srcs = ["key_test.go"],
 | 
			
		||||
    embed = [":go_default_library"],
 | 
			
		||||
)
 | 
			
		||||
 | 
			
		||||
filegroup(
 | 
			
		||||
    name = "package-srcs",
 | 
			
		||||
    srcs = glob(["**"]),
 | 
			
		||||
@@ -1,11 +1,11 @@
 | 
			
		||||
/*
 | 
			
		||||
Copyright 2017 The Kubernetes Authors.
 | 
			
		||||
Copyright 2018 Google LLC
 | 
			
		||||
 | 
			
		||||
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
 | 
			
		||||
https://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,
 | 
			
		||||
@@ -1,11 +1,11 @@
 | 
			
		||||
/*
 | 
			
		||||
Copyright 2017 The Kubernetes Authors.
 | 
			
		||||
Copyright 2018 Google LLC
 | 
			
		||||
 | 
			
		||||
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
 | 
			
		||||
https://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,
 | 
			
		||||
@@ -1,11 +1,11 @@
 | 
			
		||||
/*
 | 
			
		||||
Copyright 2017 The Kubernetes Authors.
 | 
			
		||||
Copyright 2018 Google LLC
 | 
			
		||||
 | 
			
		||||
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
 | 
			
		||||
https://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,
 | 
			
		||||
@@ -225,9 +225,9 @@ var AllServices = []*ServiceInfo{
 | 
			
		||||
		Object:      "HealthCheck",
 | 
			
		||||
		Service:     "HealthChecks",
 | 
			
		||||
		Resource:    "healthChecks",
 | 
			
		||||
		version:     VersionBeta,
 | 
			
		||||
		version:     VersionAlpha,
 | 
			
		||||
		keyType:     Global,
 | 
			
		||||
		serviceType: reflect.TypeOf(&beta.HealthChecksService{}),
 | 
			
		||||
		serviceType: reflect.TypeOf(&alpha.HealthChecksService{}),
 | 
			
		||||
		additionalMethods: []string{
 | 
			
		||||
			"Update",
 | 
			
		||||
		},
 | 
			
		||||
@@ -236,9 +236,9 @@ var AllServices = []*ServiceInfo{
 | 
			
		||||
		Object:      "HealthCheck",
 | 
			
		||||
		Service:     "HealthChecks",
 | 
			
		||||
		Resource:    "healthChecks",
 | 
			
		||||
		version:     VersionAlpha,
 | 
			
		||||
		version:     VersionBeta,
 | 
			
		||||
		keyType:     Global,
 | 
			
		||||
		serviceType: reflect.TypeOf(&alpha.HealthChecksService{}),
 | 
			
		||||
		serviceType: reflect.TypeOf(&beta.HealthChecksService{}),
 | 
			
		||||
		additionalMethods: []string{
 | 
			
		||||
			"Update",
 | 
			
		||||
		},
 | 
			
		||||
@@ -1,11 +1,11 @@
 | 
			
		||||
/*
 | 
			
		||||
Copyright 2017 The Kubernetes Authors.
 | 
			
		||||
Copyright 2018 Google LLC
 | 
			
		||||
 | 
			
		||||
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
 | 
			
		||||
https://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,
 | 
			
		||||
@@ -1,11 +1,11 @@
 | 
			
		||||
/*
 | 
			
		||||
Copyright 2017 The Kubernetes Authors.
 | 
			
		||||
Copyright 2018 Google LLC
 | 
			
		||||
 | 
			
		||||
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
 | 
			
		||||
https://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,
 | 
			
		||||
@@ -3,12 +3,13 @@ load("@io_bazel_rules_go//go:def.bzl", "go_library")
 | 
			
		||||
go_library(
 | 
			
		||||
    name = "go_default_library",
 | 
			
		||||
    srcs = ["mock.go"],
 | 
			
		||||
    importpath = "k8s.io/kubernetes/pkg/cloudprovider/providers/gce/cloud/mock",
 | 
			
		||||
    importmap = "k8s.io/kubernetes/vendor/github.com/GoogleCloudPlatform/k8s-cloud-provider/pkg/cloud/mock",
 | 
			
		||||
    importpath = "github.com/GoogleCloudPlatform/k8s-cloud-provider/pkg/cloud/mock",
 | 
			
		||||
    visibility = ["//visibility:public"],
 | 
			
		||||
    deps = [
 | 
			
		||||
        "//pkg/cloudprovider/providers/gce/cloud:go_default_library",
 | 
			
		||||
        "//pkg/cloudprovider/providers/gce/cloud/filter:go_default_library",
 | 
			
		||||
        "//pkg/cloudprovider/providers/gce/cloud/meta:go_default_library",
 | 
			
		||||
        "//vendor/github.com/GoogleCloudPlatform/k8s-cloud-provider/pkg/cloud:go_default_library",
 | 
			
		||||
        "//vendor/github.com/GoogleCloudPlatform/k8s-cloud-provider/pkg/cloud/filter:go_default_library",
 | 
			
		||||
        "//vendor/github.com/GoogleCloudPlatform/k8s-cloud-provider/pkg/cloud/meta:go_default_library",
 | 
			
		||||
        "//vendor/google.golang.org/api/compute/v0.alpha:go_default_library",
 | 
			
		||||
        "//vendor/google.golang.org/api/compute/v0.beta:go_default_library",
 | 
			
		||||
        "//vendor/google.golang.org/api/compute/v1:go_default_library",
 | 
			
		||||
@@ -1,11 +1,11 @@
 | 
			
		||||
/*
 | 
			
		||||
Copyright 2017 The Kubernetes Authors.
 | 
			
		||||
Copyright 2018 Google LLC
 | 
			
		||||
 | 
			
		||||
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
 | 
			
		||||
https://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,
 | 
			
		||||
@@ -30,13 +30,13 @@ import (
 | 
			
		||||
	"net/http"
 | 
			
		||||
	"sync"
 | 
			
		||||
 | 
			
		||||
	cloud "github.com/GoogleCloudPlatform/k8s-cloud-provider/pkg/cloud"
 | 
			
		||||
	"github.com/GoogleCloudPlatform/k8s-cloud-provider/pkg/cloud/filter"
 | 
			
		||||
	"github.com/GoogleCloudPlatform/k8s-cloud-provider/pkg/cloud/meta"
 | 
			
		||||
	alpha "google.golang.org/api/compute/v0.alpha"
 | 
			
		||||
	beta "google.golang.org/api/compute/v0.beta"
 | 
			
		||||
	ga "google.golang.org/api/compute/v1"
 | 
			
		||||
	"google.golang.org/api/googleapi"
 | 
			
		||||
	cloud "k8s.io/kubernetes/pkg/cloudprovider/providers/gce/cloud"
 | 
			
		||||
	"k8s.io/kubernetes/pkg/cloudprovider/providers/gce/cloud/filter"
 | 
			
		||||
	"k8s.io/kubernetes/pkg/cloudprovider/providers/gce/cloud/meta"
 | 
			
		||||
)
 | 
			
		||||
 | 
			
		||||
var (
 | 
			
		||||
@@ -1,11 +1,11 @@
 | 
			
		||||
/*
 | 
			
		||||
Copyright 2017 The Kubernetes Authors.
 | 
			
		||||
Copyright 2018 Google LLC
 | 
			
		||||
 | 
			
		||||
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
 | 
			
		||||
https://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,
 | 
			
		||||
@@ -27,7 +27,7 @@ import (
 | 
			
		||||
	ga "google.golang.org/api/compute/v1"
 | 
			
		||||
	"google.golang.org/api/googleapi"
 | 
			
		||||
 | 
			
		||||
	"k8s.io/kubernetes/pkg/cloudprovider/providers/gce/cloud/meta"
 | 
			
		||||
	"github.com/GoogleCloudPlatform/k8s-cloud-provider/pkg/cloud/meta"
 | 
			
		||||
)
 | 
			
		||||
 | 
			
		||||
const (
 | 
			
		||||
@@ -1,11 +1,11 @@
 | 
			
		||||
/*
 | 
			
		||||
Copyright 2017 The Kubernetes Authors.
 | 
			
		||||
Copyright 2018 Google LLC
 | 
			
		||||
 | 
			
		||||
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
 | 
			
		||||
https://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,
 | 
			
		||||
@@ -19,7 +19,7 @@ package cloud
 | 
			
		||||
import (
 | 
			
		||||
	"context"
 | 
			
		||||
 | 
			
		||||
	"k8s.io/kubernetes/pkg/cloudprovider/providers/gce/cloud/meta"
 | 
			
		||||
	"github.com/GoogleCloudPlatform/k8s-cloud-provider/pkg/cloud/meta"
 | 
			
		||||
)
 | 
			
		||||
 | 
			
		||||
// ProjectRouter routes service calls to the appropriate GCE project.
 | 
			
		||||
@@ -1,11 +1,11 @@
 | 
			
		||||
/*
 | 
			
		||||
Copyright 2017 The Kubernetes Authors.
 | 
			
		||||
Copyright 2018 Google LLC
 | 
			
		||||
 | 
			
		||||
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
 | 
			
		||||
https://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,
 | 
			
		||||
@@ -20,7 +20,7 @@ import (
 | 
			
		||||
	"context"
 | 
			
		||||
	"time"
 | 
			
		||||
 | 
			
		||||
	"k8s.io/kubernetes/pkg/cloudprovider/providers/gce/cloud/meta"
 | 
			
		||||
	"github.com/GoogleCloudPlatform/k8s-cloud-provider/pkg/cloud/meta"
 | 
			
		||||
)
 | 
			
		||||
 | 
			
		||||
// RateLimitKey is a key identifying the operation to be rate limited. The rate limit
 | 
			
		||||
@@ -1,11 +1,11 @@
 | 
			
		||||
/*
 | 
			
		||||
Copyright 2017 The Kubernetes Authors.
 | 
			
		||||
Copyright 2018 Google LLC
 | 
			
		||||
 | 
			
		||||
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
 | 
			
		||||
https://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,
 | 
			
		||||
@@ -1,11 +1,11 @@
 | 
			
		||||
/*
 | 
			
		||||
Copyright 2017 The Kubernetes Authors.
 | 
			
		||||
Copyright 2018 Google LLC
 | 
			
		||||
 | 
			
		||||
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
 | 
			
		||||
https://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,
 | 
			
		||||
@@ -21,7 +21,7 @@ import (
 | 
			
		||||
	"fmt"
 | 
			
		||||
	"strings"
 | 
			
		||||
 | 
			
		||||
	"k8s.io/kubernetes/pkg/cloudprovider/providers/gce/cloud/meta"
 | 
			
		||||
	"github.com/GoogleCloudPlatform/k8s-cloud-provider/pkg/cloud/meta"
 | 
			
		||||
)
 | 
			
		||||
 | 
			
		||||
const (
 | 
			
		||||
		Reference in New Issue
	
	Block a user