1// Copyright 2021 Google LLC
2//
3// Licensed under the Apache License, Version 2.0 (the "License");
4// you may not use this file except in compliance with the License.
5// You may obtain a copy of the License at
6//
7//     https://www.apache.org/licenses/LICENSE-2.0
8//
9// Unless required by applicable law or agreed to in writing, software
10// distributed under the License is distributed on an "AS IS" BASIS,
11// WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied.
12// See the License for the specific language governing permissions and
13// limitations under the License.
14
15// Code generated by protoc-gen-go_gapic. DO NOT EDIT.
16
17package container
18
19import (
20	"context"
21	"fmt"
22	"math"
23	"net/url"
24	"time"
25
26	gax "github.com/googleapis/gax-go/v2"
27	"google.golang.org/api/iterator"
28	"google.golang.org/api/option"
29	"google.golang.org/api/option/internaloption"
30	gtransport "google.golang.org/api/transport/grpc"
31	containerpb "google.golang.org/genproto/googleapis/container/v1"
32	"google.golang.org/grpc"
33	"google.golang.org/grpc/codes"
34	"google.golang.org/grpc/metadata"
35	"google.golang.org/protobuf/proto"
36)
37
38var newClusterManagerClientHook clientHook
39
40// ClusterManagerCallOptions contains the retry settings for each method of ClusterManagerClient.
41type ClusterManagerCallOptions struct {
42	ListClusters            []gax.CallOption
43	GetCluster              []gax.CallOption
44	CreateCluster           []gax.CallOption
45	UpdateCluster           []gax.CallOption
46	UpdateNodePool          []gax.CallOption
47	SetNodePoolAutoscaling  []gax.CallOption
48	SetLoggingService       []gax.CallOption
49	SetMonitoringService    []gax.CallOption
50	SetAddonsConfig         []gax.CallOption
51	SetLocations            []gax.CallOption
52	UpdateMaster            []gax.CallOption
53	SetMasterAuth           []gax.CallOption
54	DeleteCluster           []gax.CallOption
55	ListOperations          []gax.CallOption
56	GetOperation            []gax.CallOption
57	CancelOperation         []gax.CallOption
58	GetServerConfig         []gax.CallOption
59	GetJSONWebKeys          []gax.CallOption
60	ListNodePools           []gax.CallOption
61	GetNodePool             []gax.CallOption
62	CreateNodePool          []gax.CallOption
63	DeleteNodePool          []gax.CallOption
64	RollbackNodePoolUpgrade []gax.CallOption
65	SetNodePoolManagement   []gax.CallOption
66	SetLabels               []gax.CallOption
67	SetLegacyAbac           []gax.CallOption
68	StartIPRotation         []gax.CallOption
69	CompleteIPRotation      []gax.CallOption
70	SetNodePoolSize         []gax.CallOption
71	SetNetworkPolicy        []gax.CallOption
72	SetMaintenancePolicy    []gax.CallOption
73	ListUsableSubnetworks   []gax.CallOption
74}
75
76func defaultClusterManagerGRPCClientOptions() []option.ClientOption {
77	return []option.ClientOption{
78		internaloption.WithDefaultEndpoint("container.googleapis.com:443"),
79		internaloption.WithDefaultMTLSEndpoint("container.mtls.googleapis.com:443"),
80		internaloption.WithDefaultAudience("https://container.googleapis.com/"),
81		internaloption.WithDefaultScopes(DefaultAuthScopes()...),
82		internaloption.EnableJwtWithScope(),
83		option.WithGRPCDialOption(grpc.WithDisableServiceConfig()),
84		option.WithGRPCDialOption(grpc.WithDefaultCallOptions(
85			grpc.MaxCallRecvMsgSize(math.MaxInt32))),
86	}
87}
88
89func defaultClusterManagerCallOptions() *ClusterManagerCallOptions {
90	return &ClusterManagerCallOptions{
91		ListClusters: []gax.CallOption{
92			gax.WithRetry(func() gax.Retryer {
93				return gax.OnCodes([]codes.Code{
94					codes.Unavailable,
95					codes.DeadlineExceeded,
96				}, gax.Backoff{
97					Initial:    100 * time.Millisecond,
98					Max:        60000 * time.Millisecond,
99					Multiplier: 1.30,
100				})
101			}),
102		},
103		GetCluster: []gax.CallOption{
104			gax.WithRetry(func() gax.Retryer {
105				return gax.OnCodes([]codes.Code{
106					codes.Unavailable,
107					codes.DeadlineExceeded,
108				}, gax.Backoff{
109					Initial:    100 * time.Millisecond,
110					Max:        60000 * time.Millisecond,
111					Multiplier: 1.30,
112				})
113			}),
114		},
115		CreateCluster:          []gax.CallOption{},
116		UpdateCluster:          []gax.CallOption{},
117		UpdateNodePool:         []gax.CallOption{},
118		SetNodePoolAutoscaling: []gax.CallOption{},
119		SetLoggingService:      []gax.CallOption{},
120		SetMonitoringService:   []gax.CallOption{},
121		SetAddonsConfig:        []gax.CallOption{},
122		SetLocations:           []gax.CallOption{},
123		UpdateMaster:           []gax.CallOption{},
124		SetMasterAuth:          []gax.CallOption{},
125		DeleteCluster: []gax.CallOption{
126			gax.WithRetry(func() gax.Retryer {
127				return gax.OnCodes([]codes.Code{
128					codes.Unavailable,
129					codes.DeadlineExceeded,
130				}, gax.Backoff{
131					Initial:    100 * time.Millisecond,
132					Max:        60000 * time.Millisecond,
133					Multiplier: 1.30,
134				})
135			}),
136		},
137		ListOperations: []gax.CallOption{
138			gax.WithRetry(func() gax.Retryer {
139				return gax.OnCodes([]codes.Code{
140					codes.Unavailable,
141					codes.DeadlineExceeded,
142				}, gax.Backoff{
143					Initial:    100 * time.Millisecond,
144					Max:        60000 * time.Millisecond,
145					Multiplier: 1.30,
146				})
147			}),
148		},
149		GetOperation: []gax.CallOption{
150			gax.WithRetry(func() gax.Retryer {
151				return gax.OnCodes([]codes.Code{
152					codes.Unavailable,
153					codes.DeadlineExceeded,
154				}, gax.Backoff{
155					Initial:    100 * time.Millisecond,
156					Max:        60000 * time.Millisecond,
157					Multiplier: 1.30,
158				})
159			}),
160		},
161		CancelOperation: []gax.CallOption{},
162		GetServerConfig: []gax.CallOption{
163			gax.WithRetry(func() gax.Retryer {
164				return gax.OnCodes([]codes.Code{
165					codes.Unavailable,
166					codes.DeadlineExceeded,
167				}, gax.Backoff{
168					Initial:    100 * time.Millisecond,
169					Max:        60000 * time.Millisecond,
170					Multiplier: 1.30,
171				})
172			}),
173		},
174		GetJSONWebKeys: []gax.CallOption{},
175		ListNodePools: []gax.CallOption{
176			gax.WithRetry(func() gax.Retryer {
177				return gax.OnCodes([]codes.Code{
178					codes.Unavailable,
179					codes.DeadlineExceeded,
180				}, gax.Backoff{
181					Initial:    100 * time.Millisecond,
182					Max:        60000 * time.Millisecond,
183					Multiplier: 1.30,
184				})
185			}),
186		},
187		GetNodePool: []gax.CallOption{
188			gax.WithRetry(func() gax.Retryer {
189				return gax.OnCodes([]codes.Code{
190					codes.Unavailable,
191					codes.DeadlineExceeded,
192				}, gax.Backoff{
193					Initial:    100 * time.Millisecond,
194					Max:        60000 * time.Millisecond,
195					Multiplier: 1.30,
196				})
197			}),
198		},
199		CreateNodePool: []gax.CallOption{},
200		DeleteNodePool: []gax.CallOption{
201			gax.WithRetry(func() gax.Retryer {
202				return gax.OnCodes([]codes.Code{
203					codes.Unavailable,
204					codes.DeadlineExceeded,
205				}, gax.Backoff{
206					Initial:    100 * time.Millisecond,
207					Max:        60000 * time.Millisecond,
208					Multiplier: 1.30,
209				})
210			}),
211		},
212		RollbackNodePoolUpgrade: []gax.CallOption{},
213		SetNodePoolManagement:   []gax.CallOption{},
214		SetLabels:               []gax.CallOption{},
215		SetLegacyAbac:           []gax.CallOption{},
216		StartIPRotation:         []gax.CallOption{},
217		CompleteIPRotation:      []gax.CallOption{},
218		SetNodePoolSize:         []gax.CallOption{},
219		SetNetworkPolicy:        []gax.CallOption{},
220		SetMaintenancePolicy:    []gax.CallOption{},
221		ListUsableSubnetworks:   []gax.CallOption{},
222	}
223}
224
225// internalClusterManagerClient is an interface that defines the methods availaible from Kubernetes Engine API.
226type internalClusterManagerClient interface {
227	Close() error
228	setGoogleClientInfo(...string)
229	Connection() *grpc.ClientConn
230	ListClusters(context.Context, *containerpb.ListClustersRequest, ...gax.CallOption) (*containerpb.ListClustersResponse, error)
231	GetCluster(context.Context, *containerpb.GetClusterRequest, ...gax.CallOption) (*containerpb.Cluster, error)
232	CreateCluster(context.Context, *containerpb.CreateClusterRequest, ...gax.CallOption) (*containerpb.Operation, error)
233	UpdateCluster(context.Context, *containerpb.UpdateClusterRequest, ...gax.CallOption) (*containerpb.Operation, error)
234	UpdateNodePool(context.Context, *containerpb.UpdateNodePoolRequest, ...gax.CallOption) (*containerpb.Operation, error)
235	SetNodePoolAutoscaling(context.Context, *containerpb.SetNodePoolAutoscalingRequest, ...gax.CallOption) (*containerpb.Operation, error)
236	SetLoggingService(context.Context, *containerpb.SetLoggingServiceRequest, ...gax.CallOption) (*containerpb.Operation, error)
237	SetMonitoringService(context.Context, *containerpb.SetMonitoringServiceRequest, ...gax.CallOption) (*containerpb.Operation, error)
238	SetAddonsConfig(context.Context, *containerpb.SetAddonsConfigRequest, ...gax.CallOption) (*containerpb.Operation, error)
239	SetLocations(context.Context, *containerpb.SetLocationsRequest, ...gax.CallOption) (*containerpb.Operation, error)
240	UpdateMaster(context.Context, *containerpb.UpdateMasterRequest, ...gax.CallOption) (*containerpb.Operation, error)
241	SetMasterAuth(context.Context, *containerpb.SetMasterAuthRequest, ...gax.CallOption) (*containerpb.Operation, error)
242	DeleteCluster(context.Context, *containerpb.DeleteClusterRequest, ...gax.CallOption) (*containerpb.Operation, error)
243	ListOperations(context.Context, *containerpb.ListOperationsRequest, ...gax.CallOption) (*containerpb.ListOperationsResponse, error)
244	GetOperation(context.Context, *containerpb.GetOperationRequest, ...gax.CallOption) (*containerpb.Operation, error)
245	CancelOperation(context.Context, *containerpb.CancelOperationRequest, ...gax.CallOption) error
246	GetServerConfig(context.Context, *containerpb.GetServerConfigRequest, ...gax.CallOption) (*containerpb.ServerConfig, error)
247	GetJSONWebKeys(context.Context, *containerpb.GetJSONWebKeysRequest, ...gax.CallOption) (*containerpb.GetJSONWebKeysResponse, error)
248	ListNodePools(context.Context, *containerpb.ListNodePoolsRequest, ...gax.CallOption) (*containerpb.ListNodePoolsResponse, error)
249	GetNodePool(context.Context, *containerpb.GetNodePoolRequest, ...gax.CallOption) (*containerpb.NodePool, error)
250	CreateNodePool(context.Context, *containerpb.CreateNodePoolRequest, ...gax.CallOption) (*containerpb.Operation, error)
251	DeleteNodePool(context.Context, *containerpb.DeleteNodePoolRequest, ...gax.CallOption) (*containerpb.Operation, error)
252	RollbackNodePoolUpgrade(context.Context, *containerpb.RollbackNodePoolUpgradeRequest, ...gax.CallOption) (*containerpb.Operation, error)
253	SetNodePoolManagement(context.Context, *containerpb.SetNodePoolManagementRequest, ...gax.CallOption) (*containerpb.Operation, error)
254	SetLabels(context.Context, *containerpb.SetLabelsRequest, ...gax.CallOption) (*containerpb.Operation, error)
255	SetLegacyAbac(context.Context, *containerpb.SetLegacyAbacRequest, ...gax.CallOption) (*containerpb.Operation, error)
256	StartIPRotation(context.Context, *containerpb.StartIPRotationRequest, ...gax.CallOption) (*containerpb.Operation, error)
257	CompleteIPRotation(context.Context, *containerpb.CompleteIPRotationRequest, ...gax.CallOption) (*containerpb.Operation, error)
258	SetNodePoolSize(context.Context, *containerpb.SetNodePoolSizeRequest, ...gax.CallOption) (*containerpb.Operation, error)
259	SetNetworkPolicy(context.Context, *containerpb.SetNetworkPolicyRequest, ...gax.CallOption) (*containerpb.Operation, error)
260	SetMaintenancePolicy(context.Context, *containerpb.SetMaintenancePolicyRequest, ...gax.CallOption) (*containerpb.Operation, error)
261	ListUsableSubnetworks(context.Context, *containerpb.ListUsableSubnetworksRequest, ...gax.CallOption) *UsableSubnetworkIterator
262}
263
264// ClusterManagerClient is a client for interacting with Kubernetes Engine API.
265// Methods, except Close, may be called concurrently. However, fields must not be modified concurrently with method calls.
266//
267// Google Kubernetes Engine Cluster Manager v1
268type ClusterManagerClient struct {
269	// The internal transport-dependent client.
270	internalClient internalClusterManagerClient
271
272	// The call options for this service.
273	CallOptions *ClusterManagerCallOptions
274}
275
276// Wrapper methods routed to the internal client.
277
278// Close closes the connection to the API service. The user should invoke this when
279// the client is no longer required.
280func (c *ClusterManagerClient) Close() error {
281	return c.internalClient.Close()
282}
283
284// setGoogleClientInfo sets the name and version of the application in
285// the `x-goog-api-client` header passed on each request. Intended for
286// use by Google-written clients.
287func (c *ClusterManagerClient) setGoogleClientInfo(keyval ...string) {
288	c.internalClient.setGoogleClientInfo(keyval...)
289}
290
291// Connection returns a connection to the API service.
292//
293// Deprecated.
294func (c *ClusterManagerClient) Connection() *grpc.ClientConn {
295	return c.internalClient.Connection()
296}
297
298// ListClusters lists all clusters owned by a project in either the specified zone or all
299// zones.
300func (c *ClusterManagerClient) ListClusters(ctx context.Context, req *containerpb.ListClustersRequest, opts ...gax.CallOption) (*containerpb.ListClustersResponse, error) {
301	return c.internalClient.ListClusters(ctx, req, opts...)
302}
303
304// GetCluster gets the details of a specific cluster.
305func (c *ClusterManagerClient) GetCluster(ctx context.Context, req *containerpb.GetClusterRequest, opts ...gax.CallOption) (*containerpb.Cluster, error) {
306	return c.internalClient.GetCluster(ctx, req, opts...)
307}
308
309// CreateCluster creates a cluster, consisting of the specified number and type of Google
310// Compute Engine instances.
311//
312// By default, the cluster is created in the project’s
313// default
314// network (at https://cloud.google.com/compute/docs/networks-and-firewalls#networks).
315//
316// One firewall is added for the cluster. After cluster creation,
317// the Kubelet creates routes for each node to allow the containers
318// on that node to communicate with all other instances in the
319// cluster.
320//
321// Finally, an entry is added to the project’s global metadata indicating
322// which CIDR range the cluster is using.
323func (c *ClusterManagerClient) CreateCluster(ctx context.Context, req *containerpb.CreateClusterRequest, opts ...gax.CallOption) (*containerpb.Operation, error) {
324	return c.internalClient.CreateCluster(ctx, req, opts...)
325}
326
327// UpdateCluster updates the settings of a specific cluster.
328func (c *ClusterManagerClient) UpdateCluster(ctx context.Context, req *containerpb.UpdateClusterRequest, opts ...gax.CallOption) (*containerpb.Operation, error) {
329	return c.internalClient.UpdateCluster(ctx, req, opts...)
330}
331
332// UpdateNodePool updates the version and/or image type for the specified node pool.
333func (c *ClusterManagerClient) UpdateNodePool(ctx context.Context, req *containerpb.UpdateNodePoolRequest, opts ...gax.CallOption) (*containerpb.Operation, error) {
334	return c.internalClient.UpdateNodePool(ctx, req, opts...)
335}
336
337// SetNodePoolAutoscaling sets the autoscaling settings for the specified node pool.
338func (c *ClusterManagerClient) SetNodePoolAutoscaling(ctx context.Context, req *containerpb.SetNodePoolAutoscalingRequest, opts ...gax.CallOption) (*containerpb.Operation, error) {
339	return c.internalClient.SetNodePoolAutoscaling(ctx, req, opts...)
340}
341
342// SetLoggingService sets the logging service for a specific cluster.
343func (c *ClusterManagerClient) SetLoggingService(ctx context.Context, req *containerpb.SetLoggingServiceRequest, opts ...gax.CallOption) (*containerpb.Operation, error) {
344	return c.internalClient.SetLoggingService(ctx, req, opts...)
345}
346
347// SetMonitoringService sets the monitoring service for a specific cluster.
348func (c *ClusterManagerClient) SetMonitoringService(ctx context.Context, req *containerpb.SetMonitoringServiceRequest, opts ...gax.CallOption) (*containerpb.Operation, error) {
349	return c.internalClient.SetMonitoringService(ctx, req, opts...)
350}
351
352// SetAddonsConfig sets the addons for a specific cluster.
353func (c *ClusterManagerClient) SetAddonsConfig(ctx context.Context, req *containerpb.SetAddonsConfigRequest, opts ...gax.CallOption) (*containerpb.Operation, error) {
354	return c.internalClient.SetAddonsConfig(ctx, req, opts...)
355}
356
357// SetLocations sets the locations for a specific cluster.
358// Deprecated. Use
359// projects.locations.clusters.update (at https://cloud.google.com/kubernetes-engine/docs/reference/rest/v1/projects.locations.clusters/update)
360// instead.
361//
362// Deprecated: SetLocations may be removed in a future version.
363func (c *ClusterManagerClient) SetLocations(ctx context.Context, req *containerpb.SetLocationsRequest, opts ...gax.CallOption) (*containerpb.Operation, error) {
364	return c.internalClient.SetLocations(ctx, req, opts...)
365}
366
367// UpdateMaster updates the master for a specific cluster.
368func (c *ClusterManagerClient) UpdateMaster(ctx context.Context, req *containerpb.UpdateMasterRequest, opts ...gax.CallOption) (*containerpb.Operation, error) {
369	return c.internalClient.UpdateMaster(ctx, req, opts...)
370}
371
372// SetMasterAuth sets master auth materials. Currently supports changing the admin password
373// or a specific cluster, either via password generation or explicitly setting
374// the password.
375func (c *ClusterManagerClient) SetMasterAuth(ctx context.Context, req *containerpb.SetMasterAuthRequest, opts ...gax.CallOption) (*containerpb.Operation, error) {
376	return c.internalClient.SetMasterAuth(ctx, req, opts...)
377}
378
379// DeleteCluster deletes the cluster, including the Kubernetes endpoint and all worker
380// nodes.
381//
382// Firewalls and routes that were configured during cluster creation
383// are also deleted.
384//
385// Other Google Compute Engine resources that might be in use by the cluster,
386// such as load balancer resources, are not deleted if they weren’t present
387// when the cluster was initially created.
388func (c *ClusterManagerClient) DeleteCluster(ctx context.Context, req *containerpb.DeleteClusterRequest, opts ...gax.CallOption) (*containerpb.Operation, error) {
389	return c.internalClient.DeleteCluster(ctx, req, opts...)
390}
391
392// ListOperations lists all operations in a project in a specific zone or all zones.
393func (c *ClusterManagerClient) ListOperations(ctx context.Context, req *containerpb.ListOperationsRequest, opts ...gax.CallOption) (*containerpb.ListOperationsResponse, error) {
394	return c.internalClient.ListOperations(ctx, req, opts...)
395}
396
397// GetOperation gets the specified operation.
398func (c *ClusterManagerClient) GetOperation(ctx context.Context, req *containerpb.GetOperationRequest, opts ...gax.CallOption) (*containerpb.Operation, error) {
399	return c.internalClient.GetOperation(ctx, req, opts...)
400}
401
402// CancelOperation cancels the specified operation.
403func (c *ClusterManagerClient) CancelOperation(ctx context.Context, req *containerpb.CancelOperationRequest, opts ...gax.CallOption) error {
404	return c.internalClient.CancelOperation(ctx, req, opts...)
405}
406
407// GetServerConfig returns configuration info about the Google Kubernetes Engine service.
408func (c *ClusterManagerClient) GetServerConfig(ctx context.Context, req *containerpb.GetServerConfigRequest, opts ...gax.CallOption) (*containerpb.ServerConfig, error) {
409	return c.internalClient.GetServerConfig(ctx, req, opts...)
410}
411
412// GetJSONWebKeys gets the public component of the cluster signing keys in
413// JSON Web Key format.
414// This API is not yet intended for general use, and is not available for all
415// clusters.
416func (c *ClusterManagerClient) GetJSONWebKeys(ctx context.Context, req *containerpb.GetJSONWebKeysRequest, opts ...gax.CallOption) (*containerpb.GetJSONWebKeysResponse, error) {
417	return c.internalClient.GetJSONWebKeys(ctx, req, opts...)
418}
419
420// ListNodePools lists the node pools for a cluster.
421func (c *ClusterManagerClient) ListNodePools(ctx context.Context, req *containerpb.ListNodePoolsRequest, opts ...gax.CallOption) (*containerpb.ListNodePoolsResponse, error) {
422	return c.internalClient.ListNodePools(ctx, req, opts...)
423}
424
425// GetNodePool retrieves the requested node pool.
426func (c *ClusterManagerClient) GetNodePool(ctx context.Context, req *containerpb.GetNodePoolRequest, opts ...gax.CallOption) (*containerpb.NodePool, error) {
427	return c.internalClient.GetNodePool(ctx, req, opts...)
428}
429
430// CreateNodePool creates a node pool for a cluster.
431func (c *ClusterManagerClient) CreateNodePool(ctx context.Context, req *containerpb.CreateNodePoolRequest, opts ...gax.CallOption) (*containerpb.Operation, error) {
432	return c.internalClient.CreateNodePool(ctx, req, opts...)
433}
434
435// DeleteNodePool deletes a node pool from a cluster.
436func (c *ClusterManagerClient) DeleteNodePool(ctx context.Context, req *containerpb.DeleteNodePoolRequest, opts ...gax.CallOption) (*containerpb.Operation, error) {
437	return c.internalClient.DeleteNodePool(ctx, req, opts...)
438}
439
440// RollbackNodePoolUpgrade rolls back a previously Aborted or Failed NodePool upgrade.
441// This makes no changes if the last upgrade successfully completed.
442func (c *ClusterManagerClient) RollbackNodePoolUpgrade(ctx context.Context, req *containerpb.RollbackNodePoolUpgradeRequest, opts ...gax.CallOption) (*containerpb.Operation, error) {
443	return c.internalClient.RollbackNodePoolUpgrade(ctx, req, opts...)
444}
445
446// SetNodePoolManagement sets the NodeManagement options for a node pool.
447func (c *ClusterManagerClient) SetNodePoolManagement(ctx context.Context, req *containerpb.SetNodePoolManagementRequest, opts ...gax.CallOption) (*containerpb.Operation, error) {
448	return c.internalClient.SetNodePoolManagement(ctx, req, opts...)
449}
450
451// SetLabels sets labels on a cluster.
452func (c *ClusterManagerClient) SetLabels(ctx context.Context, req *containerpb.SetLabelsRequest, opts ...gax.CallOption) (*containerpb.Operation, error) {
453	return c.internalClient.SetLabels(ctx, req, opts...)
454}
455
456// SetLegacyAbac enables or disables the ABAC authorization mechanism on a cluster.
457func (c *ClusterManagerClient) SetLegacyAbac(ctx context.Context, req *containerpb.SetLegacyAbacRequest, opts ...gax.CallOption) (*containerpb.Operation, error) {
458	return c.internalClient.SetLegacyAbac(ctx, req, opts...)
459}
460
461// StartIPRotation starts master IP rotation.
462func (c *ClusterManagerClient) StartIPRotation(ctx context.Context, req *containerpb.StartIPRotationRequest, opts ...gax.CallOption) (*containerpb.Operation, error) {
463	return c.internalClient.StartIPRotation(ctx, req, opts...)
464}
465
466// CompleteIPRotation completes master IP rotation.
467func (c *ClusterManagerClient) CompleteIPRotation(ctx context.Context, req *containerpb.CompleteIPRotationRequest, opts ...gax.CallOption) (*containerpb.Operation, error) {
468	return c.internalClient.CompleteIPRotation(ctx, req, opts...)
469}
470
471// SetNodePoolSize sets the size for a specific node pool.
472func (c *ClusterManagerClient) SetNodePoolSize(ctx context.Context, req *containerpb.SetNodePoolSizeRequest, opts ...gax.CallOption) (*containerpb.Operation, error) {
473	return c.internalClient.SetNodePoolSize(ctx, req, opts...)
474}
475
476// SetNetworkPolicy enables or disables Network Policy for a cluster.
477func (c *ClusterManagerClient) SetNetworkPolicy(ctx context.Context, req *containerpb.SetNetworkPolicyRequest, opts ...gax.CallOption) (*containerpb.Operation, error) {
478	return c.internalClient.SetNetworkPolicy(ctx, req, opts...)
479}
480
481// SetMaintenancePolicy sets the maintenance policy for a cluster.
482func (c *ClusterManagerClient) SetMaintenancePolicy(ctx context.Context, req *containerpb.SetMaintenancePolicyRequest, opts ...gax.CallOption) (*containerpb.Operation, error) {
483	return c.internalClient.SetMaintenancePolicy(ctx, req, opts...)
484}
485
486// ListUsableSubnetworks lists subnetworks that are usable for creating clusters in a project.
487func (c *ClusterManagerClient) ListUsableSubnetworks(ctx context.Context, req *containerpb.ListUsableSubnetworksRequest, opts ...gax.CallOption) *UsableSubnetworkIterator {
488	return c.internalClient.ListUsableSubnetworks(ctx, req, opts...)
489}
490
491// clusterManagerGRPCClient is a client for interacting with Kubernetes Engine API over gRPC transport.
492//
493// Methods, except Close, may be called concurrently. However, fields must not be modified concurrently with method calls.
494type clusterManagerGRPCClient struct {
495	// Connection pool of gRPC connections to the service.
496	connPool gtransport.ConnPool
497
498	// flag to opt out of default deadlines via GOOGLE_API_GO_EXPERIMENTAL_DISABLE_DEFAULT_DEADLINE
499	disableDeadlines bool
500
501	// Points back to the CallOptions field of the containing ClusterManagerClient
502	CallOptions **ClusterManagerCallOptions
503
504	// The gRPC API client.
505	clusterManagerClient containerpb.ClusterManagerClient
506
507	// The x-goog-* metadata to be sent with each request.
508	xGoogMetadata metadata.MD
509}
510
511// NewClusterManagerClient creates a new cluster manager client based on gRPC.
512// The returned client must be Closed when it is done being used to clean up its underlying connections.
513//
514// Google Kubernetes Engine Cluster Manager v1
515func NewClusterManagerClient(ctx context.Context, opts ...option.ClientOption) (*ClusterManagerClient, error) {
516	clientOpts := defaultClusterManagerGRPCClientOptions()
517	if newClusterManagerClientHook != nil {
518		hookOpts, err := newClusterManagerClientHook(ctx, clientHookParams{})
519		if err != nil {
520			return nil, err
521		}
522		clientOpts = append(clientOpts, hookOpts...)
523	}
524
525	disableDeadlines, err := checkDisableDeadlines()
526	if err != nil {
527		return nil, err
528	}
529
530	connPool, err := gtransport.DialPool(ctx, append(clientOpts, opts...)...)
531	if err != nil {
532		return nil, err
533	}
534	client := ClusterManagerClient{CallOptions: defaultClusterManagerCallOptions()}
535
536	c := &clusterManagerGRPCClient{
537		connPool:             connPool,
538		disableDeadlines:     disableDeadlines,
539		clusterManagerClient: containerpb.NewClusterManagerClient(connPool),
540		CallOptions:          &client.CallOptions,
541	}
542	c.setGoogleClientInfo()
543
544	client.internalClient = c
545
546	return &client, nil
547}
548
549// Connection returns a connection to the API service.
550//
551// Deprecated.
552func (c *clusterManagerGRPCClient) Connection() *grpc.ClientConn {
553	return c.connPool.Conn()
554}
555
556// setGoogleClientInfo sets the name and version of the application in
557// the `x-goog-api-client` header passed on each request. Intended for
558// use by Google-written clients.
559func (c *clusterManagerGRPCClient) setGoogleClientInfo(keyval ...string) {
560	kv := append([]string{"gl-go", versionGo()}, keyval...)
561	kv = append(kv, "gapic", versionClient, "gax", gax.Version, "grpc", grpc.Version)
562	c.xGoogMetadata = metadata.Pairs("x-goog-api-client", gax.XGoogHeader(kv...))
563}
564
565// Close closes the connection to the API service. The user should invoke this when
566// the client is no longer required.
567func (c *clusterManagerGRPCClient) Close() error {
568	return c.connPool.Close()
569}
570
571func (c *clusterManagerGRPCClient) ListClusters(ctx context.Context, req *containerpb.ListClustersRequest, opts ...gax.CallOption) (*containerpb.ListClustersResponse, error) {
572	if _, ok := ctx.Deadline(); !ok && !c.disableDeadlines {
573		cctx, cancel := context.WithTimeout(ctx, 20000*time.Millisecond)
574		defer cancel()
575		ctx = cctx
576	}
577	md := metadata.Pairs("x-goog-request-params", fmt.Sprintf("%s=%v&%s=%v&%s=%v", "parent", url.QueryEscape(req.GetParent()), "project_id", url.QueryEscape(req.GetProjectId()), "zone", url.QueryEscape(req.GetZone())))
578	ctx = insertMetadata(ctx, c.xGoogMetadata, md)
579	opts = append((*c.CallOptions).ListClusters[0:len((*c.CallOptions).ListClusters):len((*c.CallOptions).ListClusters)], opts...)
580	var resp *containerpb.ListClustersResponse
581	err := gax.Invoke(ctx, func(ctx context.Context, settings gax.CallSettings) error {
582		var err error
583		resp, err = c.clusterManagerClient.ListClusters(ctx, req, settings.GRPC...)
584		return err
585	}, opts...)
586	if err != nil {
587		return nil, err
588	}
589	return resp, nil
590}
591
592func (c *clusterManagerGRPCClient) GetCluster(ctx context.Context, req *containerpb.GetClusterRequest, opts ...gax.CallOption) (*containerpb.Cluster, error) {
593	if _, ok := ctx.Deadline(); !ok && !c.disableDeadlines {
594		cctx, cancel := context.WithTimeout(ctx, 20000*time.Millisecond)
595		defer cancel()
596		ctx = cctx
597	}
598	md := metadata.Pairs("x-goog-request-params", fmt.Sprintf("%s=%v&%s=%v&%s=%v&%s=%v", "name", url.QueryEscape(req.GetName()), "project_id", url.QueryEscape(req.GetProjectId()), "zone", url.QueryEscape(req.GetZone()), "cluster_id", url.QueryEscape(req.GetClusterId())))
599	ctx = insertMetadata(ctx, c.xGoogMetadata, md)
600	opts = append((*c.CallOptions).GetCluster[0:len((*c.CallOptions).GetCluster):len((*c.CallOptions).GetCluster)], opts...)
601	var resp *containerpb.Cluster
602	err := gax.Invoke(ctx, func(ctx context.Context, settings gax.CallSettings) error {
603		var err error
604		resp, err = c.clusterManagerClient.GetCluster(ctx, req, settings.GRPC...)
605		return err
606	}, opts...)
607	if err != nil {
608		return nil, err
609	}
610	return resp, nil
611}
612
613func (c *clusterManagerGRPCClient) CreateCluster(ctx context.Context, req *containerpb.CreateClusterRequest, opts ...gax.CallOption) (*containerpb.Operation, error) {
614	if _, ok := ctx.Deadline(); !ok && !c.disableDeadlines {
615		cctx, cancel := context.WithTimeout(ctx, 45000*time.Millisecond)
616		defer cancel()
617		ctx = cctx
618	}
619	md := metadata.Pairs("x-goog-request-params", fmt.Sprintf("%s=%v&%s=%v&%s=%v", "parent", url.QueryEscape(req.GetParent()), "project_id", url.QueryEscape(req.GetProjectId()), "zone", url.QueryEscape(req.GetZone())))
620	ctx = insertMetadata(ctx, c.xGoogMetadata, md)
621	opts = append((*c.CallOptions).CreateCluster[0:len((*c.CallOptions).CreateCluster):len((*c.CallOptions).CreateCluster)], opts...)
622	var resp *containerpb.Operation
623	err := gax.Invoke(ctx, func(ctx context.Context, settings gax.CallSettings) error {
624		var err error
625		resp, err = c.clusterManagerClient.CreateCluster(ctx, req, settings.GRPC...)
626		return err
627	}, opts...)
628	if err != nil {
629		return nil, err
630	}
631	return resp, nil
632}
633
634func (c *clusterManagerGRPCClient) UpdateCluster(ctx context.Context, req *containerpb.UpdateClusterRequest, opts ...gax.CallOption) (*containerpb.Operation, error) {
635	if _, ok := ctx.Deadline(); !ok && !c.disableDeadlines {
636		cctx, cancel := context.WithTimeout(ctx, 45000*time.Millisecond)
637		defer cancel()
638		ctx = cctx
639	}
640	md := metadata.Pairs("x-goog-request-params", fmt.Sprintf("%s=%v&%s=%v&%s=%v&%s=%v", "name", url.QueryEscape(req.GetName()), "project_id", url.QueryEscape(req.GetProjectId()), "zone", url.QueryEscape(req.GetZone()), "cluster_id", url.QueryEscape(req.GetClusterId())))
641	ctx = insertMetadata(ctx, c.xGoogMetadata, md)
642	opts = append((*c.CallOptions).UpdateCluster[0:len((*c.CallOptions).UpdateCluster):len((*c.CallOptions).UpdateCluster)], opts...)
643	var resp *containerpb.Operation
644	err := gax.Invoke(ctx, func(ctx context.Context, settings gax.CallSettings) error {
645		var err error
646		resp, err = c.clusterManagerClient.UpdateCluster(ctx, req, settings.GRPC...)
647		return err
648	}, opts...)
649	if err != nil {
650		return nil, err
651	}
652	return resp, nil
653}
654
655func (c *clusterManagerGRPCClient) UpdateNodePool(ctx context.Context, req *containerpb.UpdateNodePoolRequest, opts ...gax.CallOption) (*containerpb.Operation, error) {
656	if _, ok := ctx.Deadline(); !ok && !c.disableDeadlines {
657		cctx, cancel := context.WithTimeout(ctx, 45000*time.Millisecond)
658		defer cancel()
659		ctx = cctx
660	}
661	md := metadata.Pairs("x-goog-request-params", fmt.Sprintf("%s=%v&%s=%v&%s=%v&%s=%v&%s=%v", "name", url.QueryEscape(req.GetName()), "project_id", url.QueryEscape(req.GetProjectId()), "zone", url.QueryEscape(req.GetZone()), "cluster_id", url.QueryEscape(req.GetClusterId()), "node_pool_id", url.QueryEscape(req.GetNodePoolId())))
662	ctx = insertMetadata(ctx, c.xGoogMetadata, md)
663	opts = append((*c.CallOptions).UpdateNodePool[0:len((*c.CallOptions).UpdateNodePool):len((*c.CallOptions).UpdateNodePool)], opts...)
664	var resp *containerpb.Operation
665	err := gax.Invoke(ctx, func(ctx context.Context, settings gax.CallSettings) error {
666		var err error
667		resp, err = c.clusterManagerClient.UpdateNodePool(ctx, req, settings.GRPC...)
668		return err
669	}, opts...)
670	if err != nil {
671		return nil, err
672	}
673	return resp, nil
674}
675
676func (c *clusterManagerGRPCClient) SetNodePoolAutoscaling(ctx context.Context, req *containerpb.SetNodePoolAutoscalingRequest, opts ...gax.CallOption) (*containerpb.Operation, error) {
677	if _, ok := ctx.Deadline(); !ok && !c.disableDeadlines {
678		cctx, cancel := context.WithTimeout(ctx, 45000*time.Millisecond)
679		defer cancel()
680		ctx = cctx
681	}
682	md := metadata.Pairs("x-goog-request-params", fmt.Sprintf("%s=%v&%s=%v&%s=%v&%s=%v&%s=%v", "name", url.QueryEscape(req.GetName()), "project_id", url.QueryEscape(req.GetProjectId()), "zone", url.QueryEscape(req.GetZone()), "cluster_id", url.QueryEscape(req.GetClusterId()), "node_pool_id", url.QueryEscape(req.GetNodePoolId())))
683	ctx = insertMetadata(ctx, c.xGoogMetadata, md)
684	opts = append((*c.CallOptions).SetNodePoolAutoscaling[0:len((*c.CallOptions).SetNodePoolAutoscaling):len((*c.CallOptions).SetNodePoolAutoscaling)], opts...)
685	var resp *containerpb.Operation
686	err := gax.Invoke(ctx, func(ctx context.Context, settings gax.CallSettings) error {
687		var err error
688		resp, err = c.clusterManagerClient.SetNodePoolAutoscaling(ctx, req, settings.GRPC...)
689		return err
690	}, opts...)
691	if err != nil {
692		return nil, err
693	}
694	return resp, nil
695}
696
697func (c *clusterManagerGRPCClient) SetLoggingService(ctx context.Context, req *containerpb.SetLoggingServiceRequest, opts ...gax.CallOption) (*containerpb.Operation, error) {
698	if _, ok := ctx.Deadline(); !ok && !c.disableDeadlines {
699		cctx, cancel := context.WithTimeout(ctx, 45000*time.Millisecond)
700		defer cancel()
701		ctx = cctx
702	}
703	md := metadata.Pairs("x-goog-request-params", fmt.Sprintf("%s=%v&%s=%v&%s=%v&%s=%v", "name", url.QueryEscape(req.GetName()), "project_id", url.QueryEscape(req.GetProjectId()), "zone", url.QueryEscape(req.GetZone()), "cluster_id", url.QueryEscape(req.GetClusterId())))
704	ctx = insertMetadata(ctx, c.xGoogMetadata, md)
705	opts = append((*c.CallOptions).SetLoggingService[0:len((*c.CallOptions).SetLoggingService):len((*c.CallOptions).SetLoggingService)], opts...)
706	var resp *containerpb.Operation
707	err := gax.Invoke(ctx, func(ctx context.Context, settings gax.CallSettings) error {
708		var err error
709		resp, err = c.clusterManagerClient.SetLoggingService(ctx, req, settings.GRPC...)
710		return err
711	}, opts...)
712	if err != nil {
713		return nil, err
714	}
715	return resp, nil
716}
717
718func (c *clusterManagerGRPCClient) SetMonitoringService(ctx context.Context, req *containerpb.SetMonitoringServiceRequest, opts ...gax.CallOption) (*containerpb.Operation, error) {
719	if _, ok := ctx.Deadline(); !ok && !c.disableDeadlines {
720		cctx, cancel := context.WithTimeout(ctx, 45000*time.Millisecond)
721		defer cancel()
722		ctx = cctx
723	}
724	md := metadata.Pairs("x-goog-request-params", fmt.Sprintf("%s=%v&%s=%v&%s=%v&%s=%v", "name", url.QueryEscape(req.GetName()), "project_id", url.QueryEscape(req.GetProjectId()), "zone", url.QueryEscape(req.GetZone()), "cluster_id", url.QueryEscape(req.GetClusterId())))
725	ctx = insertMetadata(ctx, c.xGoogMetadata, md)
726	opts = append((*c.CallOptions).SetMonitoringService[0:len((*c.CallOptions).SetMonitoringService):len((*c.CallOptions).SetMonitoringService)], opts...)
727	var resp *containerpb.Operation
728	err := gax.Invoke(ctx, func(ctx context.Context, settings gax.CallSettings) error {
729		var err error
730		resp, err = c.clusterManagerClient.SetMonitoringService(ctx, req, settings.GRPC...)
731		return err
732	}, opts...)
733	if err != nil {
734		return nil, err
735	}
736	return resp, nil
737}
738
739func (c *clusterManagerGRPCClient) SetAddonsConfig(ctx context.Context, req *containerpb.SetAddonsConfigRequest, opts ...gax.CallOption) (*containerpb.Operation, error) {
740	if _, ok := ctx.Deadline(); !ok && !c.disableDeadlines {
741		cctx, cancel := context.WithTimeout(ctx, 45000*time.Millisecond)
742		defer cancel()
743		ctx = cctx
744	}
745	md := metadata.Pairs("x-goog-request-params", fmt.Sprintf("%s=%v&%s=%v&%s=%v&%s=%v", "name", url.QueryEscape(req.GetName()), "project_id", url.QueryEscape(req.GetProjectId()), "zone", url.QueryEscape(req.GetZone()), "cluster_id", url.QueryEscape(req.GetClusterId())))
746	ctx = insertMetadata(ctx, c.xGoogMetadata, md)
747	opts = append((*c.CallOptions).SetAddonsConfig[0:len((*c.CallOptions).SetAddonsConfig):len((*c.CallOptions).SetAddonsConfig)], opts...)
748	var resp *containerpb.Operation
749	err := gax.Invoke(ctx, func(ctx context.Context, settings gax.CallSettings) error {
750		var err error
751		resp, err = c.clusterManagerClient.SetAddonsConfig(ctx, req, settings.GRPC...)
752		return err
753	}, opts...)
754	if err != nil {
755		return nil, err
756	}
757	return resp, nil
758}
759
760func (c *clusterManagerGRPCClient) SetLocations(ctx context.Context, req *containerpb.SetLocationsRequest, opts ...gax.CallOption) (*containerpb.Operation, error) {
761	if _, ok := ctx.Deadline(); !ok && !c.disableDeadlines {
762		cctx, cancel := context.WithTimeout(ctx, 45000*time.Millisecond)
763		defer cancel()
764		ctx = cctx
765	}
766	md := metadata.Pairs("x-goog-request-params", fmt.Sprintf("%s=%v&%s=%v&%s=%v&%s=%v", "name", url.QueryEscape(req.GetName()), "project_id", url.QueryEscape(req.GetProjectId()), "zone", url.QueryEscape(req.GetZone()), "cluster_id", url.QueryEscape(req.GetClusterId())))
767	ctx = insertMetadata(ctx, c.xGoogMetadata, md)
768	opts = append((*c.CallOptions).SetLocations[0:len((*c.CallOptions).SetLocations):len((*c.CallOptions).SetLocations)], opts...)
769	var resp *containerpb.Operation
770	err := gax.Invoke(ctx, func(ctx context.Context, settings gax.CallSettings) error {
771		var err error
772		resp, err = c.clusterManagerClient.SetLocations(ctx, req, settings.GRPC...)
773		return err
774	}, opts...)
775	if err != nil {
776		return nil, err
777	}
778	return resp, nil
779}
780
781func (c *clusterManagerGRPCClient) UpdateMaster(ctx context.Context, req *containerpb.UpdateMasterRequest, opts ...gax.CallOption) (*containerpb.Operation, error) {
782	if _, ok := ctx.Deadline(); !ok && !c.disableDeadlines {
783		cctx, cancel := context.WithTimeout(ctx, 45000*time.Millisecond)
784		defer cancel()
785		ctx = cctx
786	}
787	md := metadata.Pairs("x-goog-request-params", fmt.Sprintf("%s=%v&%s=%v&%s=%v&%s=%v", "name", url.QueryEscape(req.GetName()), "project_id", url.QueryEscape(req.GetProjectId()), "zone", url.QueryEscape(req.GetZone()), "cluster_id", url.QueryEscape(req.GetClusterId())))
788	ctx = insertMetadata(ctx, c.xGoogMetadata, md)
789	opts = append((*c.CallOptions).UpdateMaster[0:len((*c.CallOptions).UpdateMaster):len((*c.CallOptions).UpdateMaster)], opts...)
790	var resp *containerpb.Operation
791	err := gax.Invoke(ctx, func(ctx context.Context, settings gax.CallSettings) error {
792		var err error
793		resp, err = c.clusterManagerClient.UpdateMaster(ctx, req, settings.GRPC...)
794		return err
795	}, opts...)
796	if err != nil {
797		return nil, err
798	}
799	return resp, nil
800}
801
802func (c *clusterManagerGRPCClient) SetMasterAuth(ctx context.Context, req *containerpb.SetMasterAuthRequest, opts ...gax.CallOption) (*containerpb.Operation, error) {
803	if _, ok := ctx.Deadline(); !ok && !c.disableDeadlines {
804		cctx, cancel := context.WithTimeout(ctx, 45000*time.Millisecond)
805		defer cancel()
806		ctx = cctx
807	}
808	md := metadata.Pairs("x-goog-request-params", fmt.Sprintf("%s=%v&%s=%v&%s=%v&%s=%v", "name", url.QueryEscape(req.GetName()), "project_id", url.QueryEscape(req.GetProjectId()), "zone", url.QueryEscape(req.GetZone()), "cluster_id", url.QueryEscape(req.GetClusterId())))
809	ctx = insertMetadata(ctx, c.xGoogMetadata, md)
810	opts = append((*c.CallOptions).SetMasterAuth[0:len((*c.CallOptions).SetMasterAuth):len((*c.CallOptions).SetMasterAuth)], opts...)
811	var resp *containerpb.Operation
812	err := gax.Invoke(ctx, func(ctx context.Context, settings gax.CallSettings) error {
813		var err error
814		resp, err = c.clusterManagerClient.SetMasterAuth(ctx, req, settings.GRPC...)
815		return err
816	}, opts...)
817	if err != nil {
818		return nil, err
819	}
820	return resp, nil
821}
822
823func (c *clusterManagerGRPCClient) DeleteCluster(ctx context.Context, req *containerpb.DeleteClusterRequest, opts ...gax.CallOption) (*containerpb.Operation, error) {
824	if _, ok := ctx.Deadline(); !ok && !c.disableDeadlines {
825		cctx, cancel := context.WithTimeout(ctx, 20000*time.Millisecond)
826		defer cancel()
827		ctx = cctx
828	}
829	md := metadata.Pairs("x-goog-request-params", fmt.Sprintf("%s=%v&%s=%v&%s=%v&%s=%v", "name", url.QueryEscape(req.GetName()), "project_id", url.QueryEscape(req.GetProjectId()), "zone", url.QueryEscape(req.GetZone()), "cluster_id", url.QueryEscape(req.GetClusterId())))
830	ctx = insertMetadata(ctx, c.xGoogMetadata, md)
831	opts = append((*c.CallOptions).DeleteCluster[0:len((*c.CallOptions).DeleteCluster):len((*c.CallOptions).DeleteCluster)], opts...)
832	var resp *containerpb.Operation
833	err := gax.Invoke(ctx, func(ctx context.Context, settings gax.CallSettings) error {
834		var err error
835		resp, err = c.clusterManagerClient.DeleteCluster(ctx, req, settings.GRPC...)
836		return err
837	}, opts...)
838	if err != nil {
839		return nil, err
840	}
841	return resp, nil
842}
843
844func (c *clusterManagerGRPCClient) ListOperations(ctx context.Context, req *containerpb.ListOperationsRequest, opts ...gax.CallOption) (*containerpb.ListOperationsResponse, error) {
845	if _, ok := ctx.Deadline(); !ok && !c.disableDeadlines {
846		cctx, cancel := context.WithTimeout(ctx, 20000*time.Millisecond)
847		defer cancel()
848		ctx = cctx
849	}
850	md := metadata.Pairs("x-goog-request-params", fmt.Sprintf("%s=%v&%s=%v&%s=%v", "parent", url.QueryEscape(req.GetParent()), "project_id", url.QueryEscape(req.GetProjectId()), "zone", url.QueryEscape(req.GetZone())))
851	ctx = insertMetadata(ctx, c.xGoogMetadata, md)
852	opts = append((*c.CallOptions).ListOperations[0:len((*c.CallOptions).ListOperations):len((*c.CallOptions).ListOperations)], opts...)
853	var resp *containerpb.ListOperationsResponse
854	err := gax.Invoke(ctx, func(ctx context.Context, settings gax.CallSettings) error {
855		var err error
856		resp, err = c.clusterManagerClient.ListOperations(ctx, req, settings.GRPC...)
857		return err
858	}, opts...)
859	if err != nil {
860		return nil, err
861	}
862	return resp, nil
863}
864
865func (c *clusterManagerGRPCClient) GetOperation(ctx context.Context, req *containerpb.GetOperationRequest, opts ...gax.CallOption) (*containerpb.Operation, error) {
866	if _, ok := ctx.Deadline(); !ok && !c.disableDeadlines {
867		cctx, cancel := context.WithTimeout(ctx, 20000*time.Millisecond)
868		defer cancel()
869		ctx = cctx
870	}
871	md := metadata.Pairs("x-goog-request-params", fmt.Sprintf("%s=%v&%s=%v&%s=%v&%s=%v", "name", url.QueryEscape(req.GetName()), "project_id", url.QueryEscape(req.GetProjectId()), "zone", url.QueryEscape(req.GetZone()), "operation_id", url.QueryEscape(req.GetOperationId())))
872	ctx = insertMetadata(ctx, c.xGoogMetadata, md)
873	opts = append((*c.CallOptions).GetOperation[0:len((*c.CallOptions).GetOperation):len((*c.CallOptions).GetOperation)], opts...)
874	var resp *containerpb.Operation
875	err := gax.Invoke(ctx, func(ctx context.Context, settings gax.CallSettings) error {
876		var err error
877		resp, err = c.clusterManagerClient.GetOperation(ctx, req, settings.GRPC...)
878		return err
879	}, opts...)
880	if err != nil {
881		return nil, err
882	}
883	return resp, nil
884}
885
886func (c *clusterManagerGRPCClient) CancelOperation(ctx context.Context, req *containerpb.CancelOperationRequest, opts ...gax.CallOption) error {
887	if _, ok := ctx.Deadline(); !ok && !c.disableDeadlines {
888		cctx, cancel := context.WithTimeout(ctx, 45000*time.Millisecond)
889		defer cancel()
890		ctx = cctx
891	}
892	md := metadata.Pairs("x-goog-request-params", fmt.Sprintf("%s=%v&%s=%v&%s=%v&%s=%v", "name", url.QueryEscape(req.GetName()), "project_id", url.QueryEscape(req.GetProjectId()), "zone", url.QueryEscape(req.GetZone()), "operation_id", url.QueryEscape(req.GetOperationId())))
893	ctx = insertMetadata(ctx, c.xGoogMetadata, md)
894	opts = append((*c.CallOptions).CancelOperation[0:len((*c.CallOptions).CancelOperation):len((*c.CallOptions).CancelOperation)], opts...)
895	err := gax.Invoke(ctx, func(ctx context.Context, settings gax.CallSettings) error {
896		var err error
897		_, err = c.clusterManagerClient.CancelOperation(ctx, req, settings.GRPC...)
898		return err
899	}, opts...)
900	return err
901}
902
903func (c *clusterManagerGRPCClient) GetServerConfig(ctx context.Context, req *containerpb.GetServerConfigRequest, opts ...gax.CallOption) (*containerpb.ServerConfig, error) {
904	if _, ok := ctx.Deadline(); !ok && !c.disableDeadlines {
905		cctx, cancel := context.WithTimeout(ctx, 20000*time.Millisecond)
906		defer cancel()
907		ctx = cctx
908	}
909	md := metadata.Pairs("x-goog-request-params", fmt.Sprintf("%s=%v&%s=%v&%s=%v", "name", url.QueryEscape(req.GetName()), "project_id", url.QueryEscape(req.GetProjectId()), "zone", url.QueryEscape(req.GetZone())))
910	ctx = insertMetadata(ctx, c.xGoogMetadata, md)
911	opts = append((*c.CallOptions).GetServerConfig[0:len((*c.CallOptions).GetServerConfig):len((*c.CallOptions).GetServerConfig)], opts...)
912	var resp *containerpb.ServerConfig
913	err := gax.Invoke(ctx, func(ctx context.Context, settings gax.CallSettings) error {
914		var err error
915		resp, err = c.clusterManagerClient.GetServerConfig(ctx, req, settings.GRPC...)
916		return err
917	}, opts...)
918	if err != nil {
919		return nil, err
920	}
921	return resp, nil
922}
923
924func (c *clusterManagerGRPCClient) GetJSONWebKeys(ctx context.Context, req *containerpb.GetJSONWebKeysRequest, opts ...gax.CallOption) (*containerpb.GetJSONWebKeysResponse, error) {
925	md := metadata.Pairs("x-goog-request-params", fmt.Sprintf("%s=%v", "parent", url.QueryEscape(req.GetParent())))
926	ctx = insertMetadata(ctx, c.xGoogMetadata, md)
927	opts = append((*c.CallOptions).GetJSONWebKeys[0:len((*c.CallOptions).GetJSONWebKeys):len((*c.CallOptions).GetJSONWebKeys)], opts...)
928	var resp *containerpb.GetJSONWebKeysResponse
929	err := gax.Invoke(ctx, func(ctx context.Context, settings gax.CallSettings) error {
930		var err error
931		resp, err = c.clusterManagerClient.GetJSONWebKeys(ctx, req, settings.GRPC...)
932		return err
933	}, opts...)
934	if err != nil {
935		return nil, err
936	}
937	return resp, nil
938}
939
940func (c *clusterManagerGRPCClient) ListNodePools(ctx context.Context, req *containerpb.ListNodePoolsRequest, opts ...gax.CallOption) (*containerpb.ListNodePoolsResponse, error) {
941	if _, ok := ctx.Deadline(); !ok && !c.disableDeadlines {
942		cctx, cancel := context.WithTimeout(ctx, 20000*time.Millisecond)
943		defer cancel()
944		ctx = cctx
945	}
946	md := metadata.Pairs("x-goog-request-params", fmt.Sprintf("%s=%v&%s=%v&%s=%v&%s=%v", "parent", url.QueryEscape(req.GetParent()), "project_id", url.QueryEscape(req.GetProjectId()), "zone", url.QueryEscape(req.GetZone()), "cluster_id", url.QueryEscape(req.GetClusterId())))
947	ctx = insertMetadata(ctx, c.xGoogMetadata, md)
948	opts = append((*c.CallOptions).ListNodePools[0:len((*c.CallOptions).ListNodePools):len((*c.CallOptions).ListNodePools)], opts...)
949	var resp *containerpb.ListNodePoolsResponse
950	err := gax.Invoke(ctx, func(ctx context.Context, settings gax.CallSettings) error {
951		var err error
952		resp, err = c.clusterManagerClient.ListNodePools(ctx, req, settings.GRPC...)
953		return err
954	}, opts...)
955	if err != nil {
956		return nil, err
957	}
958	return resp, nil
959}
960
961func (c *clusterManagerGRPCClient) GetNodePool(ctx context.Context, req *containerpb.GetNodePoolRequest, opts ...gax.CallOption) (*containerpb.NodePool, error) {
962	if _, ok := ctx.Deadline(); !ok && !c.disableDeadlines {
963		cctx, cancel := context.WithTimeout(ctx, 20000*time.Millisecond)
964		defer cancel()
965		ctx = cctx
966	}
967	md := metadata.Pairs("x-goog-request-params", fmt.Sprintf("%s=%v&%s=%v&%s=%v&%s=%v&%s=%v", "name", url.QueryEscape(req.GetName()), "project_id", url.QueryEscape(req.GetProjectId()), "zone", url.QueryEscape(req.GetZone()), "cluster_id", url.QueryEscape(req.GetClusterId()), "node_pool_id", url.QueryEscape(req.GetNodePoolId())))
968	ctx = insertMetadata(ctx, c.xGoogMetadata, md)
969	opts = append((*c.CallOptions).GetNodePool[0:len((*c.CallOptions).GetNodePool):len((*c.CallOptions).GetNodePool)], opts...)
970	var resp *containerpb.NodePool
971	err := gax.Invoke(ctx, func(ctx context.Context, settings gax.CallSettings) error {
972		var err error
973		resp, err = c.clusterManagerClient.GetNodePool(ctx, req, settings.GRPC...)
974		return err
975	}, opts...)
976	if err != nil {
977		return nil, err
978	}
979	return resp, nil
980}
981
982func (c *clusterManagerGRPCClient) CreateNodePool(ctx context.Context, req *containerpb.CreateNodePoolRequest, opts ...gax.CallOption) (*containerpb.Operation, error) {
983	if _, ok := ctx.Deadline(); !ok && !c.disableDeadlines {
984		cctx, cancel := context.WithTimeout(ctx, 45000*time.Millisecond)
985		defer cancel()
986		ctx = cctx
987	}
988	md := metadata.Pairs("x-goog-request-params", fmt.Sprintf("%s=%v&%s=%v&%s=%v&%s=%v", "parent", url.QueryEscape(req.GetParent()), "project_id", url.QueryEscape(req.GetProjectId()), "zone", url.QueryEscape(req.GetZone()), "cluster_id", url.QueryEscape(req.GetClusterId())))
989	ctx = insertMetadata(ctx, c.xGoogMetadata, md)
990	opts = append((*c.CallOptions).CreateNodePool[0:len((*c.CallOptions).CreateNodePool):len((*c.CallOptions).CreateNodePool)], opts...)
991	var resp *containerpb.Operation
992	err := gax.Invoke(ctx, func(ctx context.Context, settings gax.CallSettings) error {
993		var err error
994		resp, err = c.clusterManagerClient.CreateNodePool(ctx, req, settings.GRPC...)
995		return err
996	}, opts...)
997	if err != nil {
998		return nil, err
999	}
1000	return resp, nil
1001}
1002
1003func (c *clusterManagerGRPCClient) DeleteNodePool(ctx context.Context, req *containerpb.DeleteNodePoolRequest, opts ...gax.CallOption) (*containerpb.Operation, error) {
1004	if _, ok := ctx.Deadline(); !ok && !c.disableDeadlines {
1005		cctx, cancel := context.WithTimeout(ctx, 20000*time.Millisecond)
1006		defer cancel()
1007		ctx = cctx
1008	}
1009	md := metadata.Pairs("x-goog-request-params", fmt.Sprintf("%s=%v&%s=%v&%s=%v&%s=%v&%s=%v", "name", url.QueryEscape(req.GetName()), "project_id", url.QueryEscape(req.GetProjectId()), "zone", url.QueryEscape(req.GetZone()), "cluster_id", url.QueryEscape(req.GetClusterId()), "node_pool_id", url.QueryEscape(req.GetNodePoolId())))
1010	ctx = insertMetadata(ctx, c.xGoogMetadata, md)
1011	opts = append((*c.CallOptions).DeleteNodePool[0:len((*c.CallOptions).DeleteNodePool):len((*c.CallOptions).DeleteNodePool)], opts...)
1012	var resp *containerpb.Operation
1013	err := gax.Invoke(ctx, func(ctx context.Context, settings gax.CallSettings) error {
1014		var err error
1015		resp, err = c.clusterManagerClient.DeleteNodePool(ctx, req, settings.GRPC...)
1016		return err
1017	}, opts...)
1018	if err != nil {
1019		return nil, err
1020	}
1021	return resp, nil
1022}
1023
1024func (c *clusterManagerGRPCClient) RollbackNodePoolUpgrade(ctx context.Context, req *containerpb.RollbackNodePoolUpgradeRequest, opts ...gax.CallOption) (*containerpb.Operation, error) {
1025	if _, ok := ctx.Deadline(); !ok && !c.disableDeadlines {
1026		cctx, cancel := context.WithTimeout(ctx, 45000*time.Millisecond)
1027		defer cancel()
1028		ctx = cctx
1029	}
1030	md := metadata.Pairs("x-goog-request-params", fmt.Sprintf("%s=%v&%s=%v&%s=%v&%s=%v&%s=%v", "name", url.QueryEscape(req.GetName()), "project_id", url.QueryEscape(req.GetProjectId()), "zone", url.QueryEscape(req.GetZone()), "cluster_id", url.QueryEscape(req.GetClusterId()), "node_pool_id", url.QueryEscape(req.GetNodePoolId())))
1031	ctx = insertMetadata(ctx, c.xGoogMetadata, md)
1032	opts = append((*c.CallOptions).RollbackNodePoolUpgrade[0:len((*c.CallOptions).RollbackNodePoolUpgrade):len((*c.CallOptions).RollbackNodePoolUpgrade)], opts...)
1033	var resp *containerpb.Operation
1034	err := gax.Invoke(ctx, func(ctx context.Context, settings gax.CallSettings) error {
1035		var err error
1036		resp, err = c.clusterManagerClient.RollbackNodePoolUpgrade(ctx, req, settings.GRPC...)
1037		return err
1038	}, opts...)
1039	if err != nil {
1040		return nil, err
1041	}
1042	return resp, nil
1043}
1044
1045func (c *clusterManagerGRPCClient) SetNodePoolManagement(ctx context.Context, req *containerpb.SetNodePoolManagementRequest, opts ...gax.CallOption) (*containerpb.Operation, error) {
1046	if _, ok := ctx.Deadline(); !ok && !c.disableDeadlines {
1047		cctx, cancel := context.WithTimeout(ctx, 45000*time.Millisecond)
1048		defer cancel()
1049		ctx = cctx
1050	}
1051	md := metadata.Pairs("x-goog-request-params", fmt.Sprintf("%s=%v&%s=%v&%s=%v&%s=%v&%s=%v", "name", url.QueryEscape(req.GetName()), "project_id", url.QueryEscape(req.GetProjectId()), "zone", url.QueryEscape(req.GetZone()), "cluster_id", url.QueryEscape(req.GetClusterId()), "node_pool_id", url.QueryEscape(req.GetNodePoolId())))
1052	ctx = insertMetadata(ctx, c.xGoogMetadata, md)
1053	opts = append((*c.CallOptions).SetNodePoolManagement[0:len((*c.CallOptions).SetNodePoolManagement):len((*c.CallOptions).SetNodePoolManagement)], opts...)
1054	var resp *containerpb.Operation
1055	err := gax.Invoke(ctx, func(ctx context.Context, settings gax.CallSettings) error {
1056		var err error
1057		resp, err = c.clusterManagerClient.SetNodePoolManagement(ctx, req, settings.GRPC...)
1058		return err
1059	}, opts...)
1060	if err != nil {
1061		return nil, err
1062	}
1063	return resp, nil
1064}
1065
1066func (c *clusterManagerGRPCClient) SetLabels(ctx context.Context, req *containerpb.SetLabelsRequest, opts ...gax.CallOption) (*containerpb.Operation, error) {
1067	if _, ok := ctx.Deadline(); !ok && !c.disableDeadlines {
1068		cctx, cancel := context.WithTimeout(ctx, 45000*time.Millisecond)
1069		defer cancel()
1070		ctx = cctx
1071	}
1072	md := metadata.Pairs("x-goog-request-params", fmt.Sprintf("%s=%v&%s=%v&%s=%v&%s=%v", "name", url.QueryEscape(req.GetName()), "project_id", url.QueryEscape(req.GetProjectId()), "zone", url.QueryEscape(req.GetZone()), "cluster_id", url.QueryEscape(req.GetClusterId())))
1073	ctx = insertMetadata(ctx, c.xGoogMetadata, md)
1074	opts = append((*c.CallOptions).SetLabels[0:len((*c.CallOptions).SetLabels):len((*c.CallOptions).SetLabels)], opts...)
1075	var resp *containerpb.Operation
1076	err := gax.Invoke(ctx, func(ctx context.Context, settings gax.CallSettings) error {
1077		var err error
1078		resp, err = c.clusterManagerClient.SetLabels(ctx, req, settings.GRPC...)
1079		return err
1080	}, opts...)
1081	if err != nil {
1082		return nil, err
1083	}
1084	return resp, nil
1085}
1086
1087func (c *clusterManagerGRPCClient) SetLegacyAbac(ctx context.Context, req *containerpb.SetLegacyAbacRequest, opts ...gax.CallOption) (*containerpb.Operation, error) {
1088	if _, ok := ctx.Deadline(); !ok && !c.disableDeadlines {
1089		cctx, cancel := context.WithTimeout(ctx, 45000*time.Millisecond)
1090		defer cancel()
1091		ctx = cctx
1092	}
1093	md := metadata.Pairs("x-goog-request-params", fmt.Sprintf("%s=%v&%s=%v&%s=%v&%s=%v", "name", url.QueryEscape(req.GetName()), "project_id", url.QueryEscape(req.GetProjectId()), "zone", url.QueryEscape(req.GetZone()), "cluster_id", url.QueryEscape(req.GetClusterId())))
1094	ctx = insertMetadata(ctx, c.xGoogMetadata, md)
1095	opts = append((*c.CallOptions).SetLegacyAbac[0:len((*c.CallOptions).SetLegacyAbac):len((*c.CallOptions).SetLegacyAbac)], opts...)
1096	var resp *containerpb.Operation
1097	err := gax.Invoke(ctx, func(ctx context.Context, settings gax.CallSettings) error {
1098		var err error
1099		resp, err = c.clusterManagerClient.SetLegacyAbac(ctx, req, settings.GRPC...)
1100		return err
1101	}, opts...)
1102	if err != nil {
1103		return nil, err
1104	}
1105	return resp, nil
1106}
1107
1108func (c *clusterManagerGRPCClient) StartIPRotation(ctx context.Context, req *containerpb.StartIPRotationRequest, opts ...gax.CallOption) (*containerpb.Operation, error) {
1109	if _, ok := ctx.Deadline(); !ok && !c.disableDeadlines {
1110		cctx, cancel := context.WithTimeout(ctx, 45000*time.Millisecond)
1111		defer cancel()
1112		ctx = cctx
1113	}
1114	md := metadata.Pairs("x-goog-request-params", fmt.Sprintf("%s=%v&%s=%v&%s=%v&%s=%v", "name", url.QueryEscape(req.GetName()), "project_id", url.QueryEscape(req.GetProjectId()), "zone", url.QueryEscape(req.GetZone()), "cluster_id", url.QueryEscape(req.GetClusterId())))
1115	ctx = insertMetadata(ctx, c.xGoogMetadata, md)
1116	opts = append((*c.CallOptions).StartIPRotation[0:len((*c.CallOptions).StartIPRotation):len((*c.CallOptions).StartIPRotation)], opts...)
1117	var resp *containerpb.Operation
1118	err := gax.Invoke(ctx, func(ctx context.Context, settings gax.CallSettings) error {
1119		var err error
1120		resp, err = c.clusterManagerClient.StartIPRotation(ctx, req, settings.GRPC...)
1121		return err
1122	}, opts...)
1123	if err != nil {
1124		return nil, err
1125	}
1126	return resp, nil
1127}
1128
1129func (c *clusterManagerGRPCClient) CompleteIPRotation(ctx context.Context, req *containerpb.CompleteIPRotationRequest, opts ...gax.CallOption) (*containerpb.Operation, error) {
1130	if _, ok := ctx.Deadline(); !ok && !c.disableDeadlines {
1131		cctx, cancel := context.WithTimeout(ctx, 45000*time.Millisecond)
1132		defer cancel()
1133		ctx = cctx
1134	}
1135	md := metadata.Pairs("x-goog-request-params", fmt.Sprintf("%s=%v&%s=%v&%s=%v&%s=%v", "name", url.QueryEscape(req.GetName()), "project_id", url.QueryEscape(req.GetProjectId()), "zone", url.QueryEscape(req.GetZone()), "cluster_id", url.QueryEscape(req.GetClusterId())))
1136	ctx = insertMetadata(ctx, c.xGoogMetadata, md)
1137	opts = append((*c.CallOptions).CompleteIPRotation[0:len((*c.CallOptions).CompleteIPRotation):len((*c.CallOptions).CompleteIPRotation)], opts...)
1138	var resp *containerpb.Operation
1139	err := gax.Invoke(ctx, func(ctx context.Context, settings gax.CallSettings) error {
1140		var err error
1141		resp, err = c.clusterManagerClient.CompleteIPRotation(ctx, req, settings.GRPC...)
1142		return err
1143	}, opts...)
1144	if err != nil {
1145		return nil, err
1146	}
1147	return resp, nil
1148}
1149
1150func (c *clusterManagerGRPCClient) SetNodePoolSize(ctx context.Context, req *containerpb.SetNodePoolSizeRequest, opts ...gax.CallOption) (*containerpb.Operation, error) {
1151	if _, ok := ctx.Deadline(); !ok && !c.disableDeadlines {
1152		cctx, cancel := context.WithTimeout(ctx, 45000*time.Millisecond)
1153		defer cancel()
1154		ctx = cctx
1155	}
1156	md := metadata.Pairs("x-goog-request-params", fmt.Sprintf("%s=%v&%s=%v&%s=%v&%s=%v&%s=%v", "name", url.QueryEscape(req.GetName()), "project_id", url.QueryEscape(req.GetProjectId()), "zone", url.QueryEscape(req.GetZone()), "cluster_id", url.QueryEscape(req.GetClusterId()), "node_pool_id", url.QueryEscape(req.GetNodePoolId())))
1157	ctx = insertMetadata(ctx, c.xGoogMetadata, md)
1158	opts = append((*c.CallOptions).SetNodePoolSize[0:len((*c.CallOptions).SetNodePoolSize):len((*c.CallOptions).SetNodePoolSize)], opts...)
1159	var resp *containerpb.Operation
1160	err := gax.Invoke(ctx, func(ctx context.Context, settings gax.CallSettings) error {
1161		var err error
1162		resp, err = c.clusterManagerClient.SetNodePoolSize(ctx, req, settings.GRPC...)
1163		return err
1164	}, opts...)
1165	if err != nil {
1166		return nil, err
1167	}
1168	return resp, nil
1169}
1170
1171func (c *clusterManagerGRPCClient) SetNetworkPolicy(ctx context.Context, req *containerpb.SetNetworkPolicyRequest, opts ...gax.CallOption) (*containerpb.Operation, error) {
1172	if _, ok := ctx.Deadline(); !ok && !c.disableDeadlines {
1173		cctx, cancel := context.WithTimeout(ctx, 45000*time.Millisecond)
1174		defer cancel()
1175		ctx = cctx
1176	}
1177	md := metadata.Pairs("x-goog-request-params", fmt.Sprintf("%s=%v&%s=%v&%s=%v&%s=%v", "name", url.QueryEscape(req.GetName()), "project_id", url.QueryEscape(req.GetProjectId()), "zone", url.QueryEscape(req.GetZone()), "cluster_id", url.QueryEscape(req.GetClusterId())))
1178	ctx = insertMetadata(ctx, c.xGoogMetadata, md)
1179	opts = append((*c.CallOptions).SetNetworkPolicy[0:len((*c.CallOptions).SetNetworkPolicy):len((*c.CallOptions).SetNetworkPolicy)], opts...)
1180	var resp *containerpb.Operation
1181	err := gax.Invoke(ctx, func(ctx context.Context, settings gax.CallSettings) error {
1182		var err error
1183		resp, err = c.clusterManagerClient.SetNetworkPolicy(ctx, req, settings.GRPC...)
1184		return err
1185	}, opts...)
1186	if err != nil {
1187		return nil, err
1188	}
1189	return resp, nil
1190}
1191
1192func (c *clusterManagerGRPCClient) SetMaintenancePolicy(ctx context.Context, req *containerpb.SetMaintenancePolicyRequest, opts ...gax.CallOption) (*containerpb.Operation, error) {
1193	if _, ok := ctx.Deadline(); !ok && !c.disableDeadlines {
1194		cctx, cancel := context.WithTimeout(ctx, 45000*time.Millisecond)
1195		defer cancel()
1196		ctx = cctx
1197	}
1198	md := metadata.Pairs("x-goog-request-params", fmt.Sprintf("%s=%v&%s=%v&%s=%v&%s=%v", "name", url.QueryEscape(req.GetName()), "project_id", url.QueryEscape(req.GetProjectId()), "zone", url.QueryEscape(req.GetZone()), "cluster_id", url.QueryEscape(req.GetClusterId())))
1199	ctx = insertMetadata(ctx, c.xGoogMetadata, md)
1200	opts = append((*c.CallOptions).SetMaintenancePolicy[0:len((*c.CallOptions).SetMaintenancePolicy):len((*c.CallOptions).SetMaintenancePolicy)], opts...)
1201	var resp *containerpb.Operation
1202	err := gax.Invoke(ctx, func(ctx context.Context, settings gax.CallSettings) error {
1203		var err error
1204		resp, err = c.clusterManagerClient.SetMaintenancePolicy(ctx, req, settings.GRPC...)
1205		return err
1206	}, opts...)
1207	if err != nil {
1208		return nil, err
1209	}
1210	return resp, nil
1211}
1212
1213func (c *clusterManagerGRPCClient) ListUsableSubnetworks(ctx context.Context, req *containerpb.ListUsableSubnetworksRequest, opts ...gax.CallOption) *UsableSubnetworkIterator {
1214	md := metadata.Pairs("x-goog-request-params", fmt.Sprintf("%s=%v", "parent", url.QueryEscape(req.GetParent())))
1215	ctx = insertMetadata(ctx, c.xGoogMetadata, md)
1216	opts = append((*c.CallOptions).ListUsableSubnetworks[0:len((*c.CallOptions).ListUsableSubnetworks):len((*c.CallOptions).ListUsableSubnetworks)], opts...)
1217	it := &UsableSubnetworkIterator{}
1218	req = proto.Clone(req).(*containerpb.ListUsableSubnetworksRequest)
1219	it.InternalFetch = func(pageSize int, pageToken string) ([]*containerpb.UsableSubnetwork, string, error) {
1220		resp := &containerpb.ListUsableSubnetworksResponse{}
1221		if pageToken != "" {
1222			req.PageToken = pageToken
1223		}
1224		if pageSize > math.MaxInt32 {
1225			req.PageSize = math.MaxInt32
1226		} else if pageSize != 0 {
1227			req.PageSize = int32(pageSize)
1228		}
1229		err := gax.Invoke(ctx, func(ctx context.Context, settings gax.CallSettings) error {
1230			var err error
1231			resp, err = c.clusterManagerClient.ListUsableSubnetworks(ctx, req, settings.GRPC...)
1232			return err
1233		}, opts...)
1234		if err != nil {
1235			return nil, "", err
1236		}
1237
1238		it.Response = resp
1239		return resp.GetSubnetworks(), resp.GetNextPageToken(), nil
1240	}
1241	fetch := func(pageSize int, pageToken string) (string, error) {
1242		items, nextPageToken, err := it.InternalFetch(pageSize, pageToken)
1243		if err != nil {
1244			return "", err
1245		}
1246		it.items = append(it.items, items...)
1247		return nextPageToken, nil
1248	}
1249
1250	it.pageInfo, it.nextFunc = iterator.NewPageInfo(fetch, it.bufLen, it.takeBuf)
1251	it.pageInfo.MaxSize = int(req.GetPageSize())
1252	it.pageInfo.Token = req.GetPageToken()
1253
1254	return it
1255}
1256
1257// UsableSubnetworkIterator manages a stream of *containerpb.UsableSubnetwork.
1258type UsableSubnetworkIterator struct {
1259	items    []*containerpb.UsableSubnetwork
1260	pageInfo *iterator.PageInfo
1261	nextFunc func() error
1262
1263	// Response is the raw response for the current page.
1264	// It must be cast to the RPC response type.
1265	// Calling Next() or InternalFetch() updates this value.
1266	Response interface{}
1267
1268	// InternalFetch is for use by the Google Cloud Libraries only.
1269	// It is not part of the stable interface of this package.
1270	//
1271	// InternalFetch returns results from a single call to the underlying RPC.
1272	// The number of results is no greater than pageSize.
1273	// If there are no more results, nextPageToken is empty and err is nil.
1274	InternalFetch func(pageSize int, pageToken string) (results []*containerpb.UsableSubnetwork, nextPageToken string, err error)
1275}
1276
1277// PageInfo supports pagination. See the google.golang.org/api/iterator package for details.
1278func (it *UsableSubnetworkIterator) PageInfo() *iterator.PageInfo {
1279	return it.pageInfo
1280}
1281
1282// Next returns the next result. Its second return value is iterator.Done if there are no more
1283// results. Once Next returns Done, all subsequent calls will return Done.
1284func (it *UsableSubnetworkIterator) Next() (*containerpb.UsableSubnetwork, error) {
1285	var item *containerpb.UsableSubnetwork
1286	if err := it.nextFunc(); err != nil {
1287		return item, err
1288	}
1289	item = it.items[0]
1290	it.items = it.items[1:]
1291	return item, nil
1292}
1293
1294func (it *UsableSubnetworkIterator) bufLen() int {
1295	return len(it.items)
1296}
1297
1298func (it *UsableSubnetworkIterator) takeBuf() interface{} {
1299	b := it.items
1300	it.items = nil
1301	return b
1302}
1303