1// Copyright 2020 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	"github.com/golang/protobuf/proto"
27	gax "github.com/googleapis/gax-go/v2"
28	"google.golang.org/api/iterator"
29	"google.golang.org/api/option"
30	"google.golang.org/api/option/internaloption"
31	gtransport "google.golang.org/api/transport/grpc"
32	containerpb "google.golang.org/genproto/googleapis/container/v1"
33	"google.golang.org/grpc"
34	"google.golang.org/grpc/codes"
35	"google.golang.org/grpc/metadata"
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	ListNodePools           []gax.CallOption
60	GetNodePool             []gax.CallOption
61	CreateNodePool          []gax.CallOption
62	DeleteNodePool          []gax.CallOption
63	RollbackNodePoolUpgrade []gax.CallOption
64	SetNodePoolManagement   []gax.CallOption
65	SetLabels               []gax.CallOption
66	SetLegacyAbac           []gax.CallOption
67	StartIPRotation         []gax.CallOption
68	CompleteIPRotation      []gax.CallOption
69	SetNodePoolSize         []gax.CallOption
70	SetNetworkPolicy        []gax.CallOption
71	SetMaintenancePolicy    []gax.CallOption
72	ListUsableSubnetworks   []gax.CallOption
73}
74
75func defaultClusterManagerClientOptions() []option.ClientOption {
76	return []option.ClientOption{
77		internaloption.WithDefaultEndpoint("container.googleapis.com:443"),
78		internaloption.WithDefaultMTLSEndpoint("container.mtls.googleapis.com:443"),
79		option.WithGRPCDialOption(grpc.WithDisableServiceConfig()),
80		option.WithScopes(DefaultAuthScopes()...),
81		option.WithGRPCDialOption(grpc.WithDefaultCallOptions(
82			grpc.MaxCallRecvMsgSize(math.MaxInt32))),
83	}
84}
85
86func defaultClusterManagerCallOptions() *ClusterManagerCallOptions {
87	return &ClusterManagerCallOptions{
88		ListClusters: []gax.CallOption{
89			gax.WithRetry(func() gax.Retryer {
90				return gax.OnCodes([]codes.Code{
91					codes.Unavailable,
92					codes.DeadlineExceeded,
93				}, gax.Backoff{
94					Initial:    100 * time.Millisecond,
95					Max:        60000 * time.Millisecond,
96					Multiplier: 1.30,
97				})
98			}),
99		},
100		GetCluster: []gax.CallOption{
101			gax.WithRetry(func() gax.Retryer {
102				return gax.OnCodes([]codes.Code{
103					codes.Unavailable,
104					codes.DeadlineExceeded,
105				}, gax.Backoff{
106					Initial:    100 * time.Millisecond,
107					Max:        60000 * time.Millisecond,
108					Multiplier: 1.30,
109				})
110			}),
111		},
112		CreateCluster:          []gax.CallOption{},
113		UpdateCluster:          []gax.CallOption{},
114		UpdateNodePool:         []gax.CallOption{},
115		SetNodePoolAutoscaling: []gax.CallOption{},
116		SetLoggingService:      []gax.CallOption{},
117		SetMonitoringService:   []gax.CallOption{},
118		SetAddonsConfig:        []gax.CallOption{},
119		SetLocations:           []gax.CallOption{},
120		UpdateMaster:           []gax.CallOption{},
121		SetMasterAuth:          []gax.CallOption{},
122		DeleteCluster: []gax.CallOption{
123			gax.WithRetry(func() gax.Retryer {
124				return gax.OnCodes([]codes.Code{
125					codes.Unavailable,
126					codes.DeadlineExceeded,
127				}, gax.Backoff{
128					Initial:    100 * time.Millisecond,
129					Max:        60000 * time.Millisecond,
130					Multiplier: 1.30,
131				})
132			}),
133		},
134		ListOperations: []gax.CallOption{
135			gax.WithRetry(func() gax.Retryer {
136				return gax.OnCodes([]codes.Code{
137					codes.Unavailable,
138					codes.DeadlineExceeded,
139				}, gax.Backoff{
140					Initial:    100 * time.Millisecond,
141					Max:        60000 * time.Millisecond,
142					Multiplier: 1.30,
143				})
144			}),
145		},
146		GetOperation: []gax.CallOption{
147			gax.WithRetry(func() gax.Retryer {
148				return gax.OnCodes([]codes.Code{
149					codes.Unavailable,
150					codes.DeadlineExceeded,
151				}, gax.Backoff{
152					Initial:    100 * time.Millisecond,
153					Max:        60000 * time.Millisecond,
154					Multiplier: 1.30,
155				})
156			}),
157		},
158		CancelOperation: []gax.CallOption{},
159		GetServerConfig: []gax.CallOption{
160			gax.WithRetry(func() gax.Retryer {
161				return gax.OnCodes([]codes.Code{
162					codes.Unavailable,
163					codes.DeadlineExceeded,
164				}, gax.Backoff{
165					Initial:    100 * time.Millisecond,
166					Max:        60000 * time.Millisecond,
167					Multiplier: 1.30,
168				})
169			}),
170		},
171		ListNodePools: []gax.CallOption{
172			gax.WithRetry(func() gax.Retryer {
173				return gax.OnCodes([]codes.Code{
174					codes.Unavailable,
175					codes.DeadlineExceeded,
176				}, gax.Backoff{
177					Initial:    100 * time.Millisecond,
178					Max:        60000 * time.Millisecond,
179					Multiplier: 1.30,
180				})
181			}),
182		},
183		GetNodePool: []gax.CallOption{
184			gax.WithRetry(func() gax.Retryer {
185				return gax.OnCodes([]codes.Code{
186					codes.Unavailable,
187					codes.DeadlineExceeded,
188				}, gax.Backoff{
189					Initial:    100 * time.Millisecond,
190					Max:        60000 * time.Millisecond,
191					Multiplier: 1.30,
192				})
193			}),
194		},
195		CreateNodePool: []gax.CallOption{},
196		DeleteNodePool: []gax.CallOption{
197			gax.WithRetry(func() gax.Retryer {
198				return gax.OnCodes([]codes.Code{
199					codes.Unavailable,
200					codes.DeadlineExceeded,
201				}, gax.Backoff{
202					Initial:    100 * time.Millisecond,
203					Max:        60000 * time.Millisecond,
204					Multiplier: 1.30,
205				})
206			}),
207		},
208		RollbackNodePoolUpgrade: []gax.CallOption{},
209		SetNodePoolManagement:   []gax.CallOption{},
210		SetLabels:               []gax.CallOption{},
211		SetLegacyAbac:           []gax.CallOption{},
212		StartIPRotation:         []gax.CallOption{},
213		CompleteIPRotation:      []gax.CallOption{},
214		SetNodePoolSize:         []gax.CallOption{},
215		SetNetworkPolicy:        []gax.CallOption{},
216		SetMaintenancePolicy:    []gax.CallOption{},
217		ListUsableSubnetworks:   []gax.CallOption{},
218	}
219}
220
221// ClusterManagerClient is a client for interacting with Kubernetes Engine API.
222//
223// Methods, except Close, may be called concurrently. However, fields must not be modified concurrently with method calls.
224type ClusterManagerClient struct {
225	// Connection pool of gRPC connections to the service.
226	connPool gtransport.ConnPool
227
228	// flag to opt out of default deadlines via GOOGLE_API_GO_EXPERIMENTAL_DISABLE_DEFAULT_DEADLINE
229	disableDeadlines bool
230
231	// The gRPC API client.
232	clusterManagerClient containerpb.ClusterManagerClient
233
234	// The call options for this service.
235	CallOptions *ClusterManagerCallOptions
236
237	// The x-goog-* metadata to be sent with each request.
238	xGoogMetadata metadata.MD
239}
240
241// NewClusterManagerClient creates a new cluster manager client.
242//
243// Google Kubernetes Engine Cluster Manager v1
244func NewClusterManagerClient(ctx context.Context, opts ...option.ClientOption) (*ClusterManagerClient, error) {
245	clientOpts := defaultClusterManagerClientOptions()
246
247	if newClusterManagerClientHook != nil {
248		hookOpts, err := newClusterManagerClientHook(ctx, clientHookParams{})
249		if err != nil {
250			return nil, err
251		}
252		clientOpts = append(clientOpts, hookOpts...)
253	}
254
255	disableDeadlines, err := checkDisableDeadlines()
256	if err != nil {
257		return nil, err
258	}
259
260	connPool, err := gtransport.DialPool(ctx, append(clientOpts, opts...)...)
261	if err != nil {
262		return nil, err
263	}
264	c := &ClusterManagerClient{
265		connPool:         connPool,
266		disableDeadlines: disableDeadlines,
267		CallOptions:      defaultClusterManagerCallOptions(),
268
269		clusterManagerClient: containerpb.NewClusterManagerClient(connPool),
270	}
271	c.setGoogleClientInfo()
272
273	return c, nil
274}
275
276// Connection returns a connection to the API service.
277//
278// Deprecated.
279func (c *ClusterManagerClient) Connection() *grpc.ClientConn {
280	return c.connPool.Conn()
281}
282
283// Close closes the connection to the API service. The user should invoke this when
284// the client is no longer required.
285func (c *ClusterManagerClient) Close() error {
286	return c.connPool.Close()
287}
288
289// setGoogleClientInfo sets the name and version of the application in
290// the `x-goog-api-client` header passed on each request. Intended for
291// use by Google-written clients.
292func (c *ClusterManagerClient) setGoogleClientInfo(keyval ...string) {
293	kv := append([]string{"gl-go", versionGo()}, keyval...)
294	kv = append(kv, "gapic", versionClient, "gax", gax.Version, "grpc", grpc.Version)
295	c.xGoogMetadata = metadata.Pairs("x-goog-api-client", gax.XGoogHeader(kv...))
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	if _, ok := ctx.Deadline(); !ok && !c.disableDeadlines {
302		cctx, cancel := context.WithTimeout(ctx, 20000*time.Millisecond)
303		defer cancel()
304		ctx = cctx
305	}
306	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())))
307	ctx = insertMetadata(ctx, c.xGoogMetadata, md)
308	opts = append(c.CallOptions.ListClusters[0:len(c.CallOptions.ListClusters):len(c.CallOptions.ListClusters)], opts...)
309	var resp *containerpb.ListClustersResponse
310	err := gax.Invoke(ctx, func(ctx context.Context, settings gax.CallSettings) error {
311		var err error
312		resp, err = c.clusterManagerClient.ListClusters(ctx, req, settings.GRPC...)
313		return err
314	}, opts...)
315	if err != nil {
316		return nil, err
317	}
318	return resp, nil
319}
320
321// GetCluster gets the details of a specific cluster.
322func (c *ClusterManagerClient) GetCluster(ctx context.Context, req *containerpb.GetClusterRequest, opts ...gax.CallOption) (*containerpb.Cluster, error) {
323	if _, ok := ctx.Deadline(); !ok && !c.disableDeadlines {
324		cctx, cancel := context.WithTimeout(ctx, 20000*time.Millisecond)
325		defer cancel()
326		ctx = cctx
327	}
328	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())))
329	ctx = insertMetadata(ctx, c.xGoogMetadata, md)
330	opts = append(c.CallOptions.GetCluster[0:len(c.CallOptions.GetCluster):len(c.CallOptions.GetCluster)], opts...)
331	var resp *containerpb.Cluster
332	err := gax.Invoke(ctx, func(ctx context.Context, settings gax.CallSettings) error {
333		var err error
334		resp, err = c.clusterManagerClient.GetCluster(ctx, req, settings.GRPC...)
335		return err
336	}, opts...)
337	if err != nil {
338		return nil, err
339	}
340	return resp, nil
341}
342
343// CreateCluster creates a cluster, consisting of the specified number and type of Google
344// Compute Engine instances.
345//
346// By default, the cluster is created in the project’s
347// default network (at https://cloud.google.com/compute/docs/networks-and-firewalls#networks).
348//
349// One firewall is added for the cluster. After cluster creation,
350// the Kubelet creates routes for each node to allow the containers
351// on that node to communicate with all other instances in the
352// cluster.
353//
354// Finally, an entry is added to the project’s global metadata indicating
355// which CIDR range the cluster is using.
356func (c *ClusterManagerClient) CreateCluster(ctx context.Context, req *containerpb.CreateClusterRequest, opts ...gax.CallOption) (*containerpb.Operation, error) {
357	if _, ok := ctx.Deadline(); !ok && !c.disableDeadlines {
358		cctx, cancel := context.WithTimeout(ctx, 45000*time.Millisecond)
359		defer cancel()
360		ctx = cctx
361	}
362	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())))
363	ctx = insertMetadata(ctx, c.xGoogMetadata, md)
364	opts = append(c.CallOptions.CreateCluster[0:len(c.CallOptions.CreateCluster):len(c.CallOptions.CreateCluster)], opts...)
365	var resp *containerpb.Operation
366	err := gax.Invoke(ctx, func(ctx context.Context, settings gax.CallSettings) error {
367		var err error
368		resp, err = c.clusterManagerClient.CreateCluster(ctx, req, settings.GRPC...)
369		return err
370	}, opts...)
371	if err != nil {
372		return nil, err
373	}
374	return resp, nil
375}
376
377// UpdateCluster updates the settings of a specific cluster.
378func (c *ClusterManagerClient) UpdateCluster(ctx context.Context, req *containerpb.UpdateClusterRequest, opts ...gax.CallOption) (*containerpb.Operation, error) {
379	if _, ok := ctx.Deadline(); !ok && !c.disableDeadlines {
380		cctx, cancel := context.WithTimeout(ctx, 45000*time.Millisecond)
381		defer cancel()
382		ctx = cctx
383	}
384	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())))
385	ctx = insertMetadata(ctx, c.xGoogMetadata, md)
386	opts = append(c.CallOptions.UpdateCluster[0:len(c.CallOptions.UpdateCluster):len(c.CallOptions.UpdateCluster)], opts...)
387	var resp *containerpb.Operation
388	err := gax.Invoke(ctx, func(ctx context.Context, settings gax.CallSettings) error {
389		var err error
390		resp, err = c.clusterManagerClient.UpdateCluster(ctx, req, settings.GRPC...)
391		return err
392	}, opts...)
393	if err != nil {
394		return nil, err
395	}
396	return resp, nil
397}
398
399// UpdateNodePool updates the version and/or image type for the specified node pool.
400func (c *ClusterManagerClient) UpdateNodePool(ctx context.Context, req *containerpb.UpdateNodePoolRequest, opts ...gax.CallOption) (*containerpb.Operation, error) {
401	if _, ok := ctx.Deadline(); !ok && !c.disableDeadlines {
402		cctx, cancel := context.WithTimeout(ctx, 45000*time.Millisecond)
403		defer cancel()
404		ctx = cctx
405	}
406	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())))
407	ctx = insertMetadata(ctx, c.xGoogMetadata, md)
408	opts = append(c.CallOptions.UpdateNodePool[0:len(c.CallOptions.UpdateNodePool):len(c.CallOptions.UpdateNodePool)], opts...)
409	var resp *containerpb.Operation
410	err := gax.Invoke(ctx, func(ctx context.Context, settings gax.CallSettings) error {
411		var err error
412		resp, err = c.clusterManagerClient.UpdateNodePool(ctx, req, settings.GRPC...)
413		return err
414	}, opts...)
415	if err != nil {
416		return nil, err
417	}
418	return resp, nil
419}
420
421// SetNodePoolAutoscaling sets the autoscaling settings for the specified node pool.
422func (c *ClusterManagerClient) SetNodePoolAutoscaling(ctx context.Context, req *containerpb.SetNodePoolAutoscalingRequest, opts ...gax.CallOption) (*containerpb.Operation, error) {
423	if _, ok := ctx.Deadline(); !ok && !c.disableDeadlines {
424		cctx, cancel := context.WithTimeout(ctx, 45000*time.Millisecond)
425		defer cancel()
426		ctx = cctx
427	}
428	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())))
429	ctx = insertMetadata(ctx, c.xGoogMetadata, md)
430	opts = append(c.CallOptions.SetNodePoolAutoscaling[0:len(c.CallOptions.SetNodePoolAutoscaling):len(c.CallOptions.SetNodePoolAutoscaling)], opts...)
431	var resp *containerpb.Operation
432	err := gax.Invoke(ctx, func(ctx context.Context, settings gax.CallSettings) error {
433		var err error
434		resp, err = c.clusterManagerClient.SetNodePoolAutoscaling(ctx, req, settings.GRPC...)
435		return err
436	}, opts...)
437	if err != nil {
438		return nil, err
439	}
440	return resp, nil
441}
442
443// SetLoggingService sets the logging service for a specific cluster.
444func (c *ClusterManagerClient) SetLoggingService(ctx context.Context, req *containerpb.SetLoggingServiceRequest, opts ...gax.CallOption) (*containerpb.Operation, error) {
445	if _, ok := ctx.Deadline(); !ok && !c.disableDeadlines {
446		cctx, cancel := context.WithTimeout(ctx, 45000*time.Millisecond)
447		defer cancel()
448		ctx = cctx
449	}
450	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())))
451	ctx = insertMetadata(ctx, c.xGoogMetadata, md)
452	opts = append(c.CallOptions.SetLoggingService[0:len(c.CallOptions.SetLoggingService):len(c.CallOptions.SetLoggingService)], opts...)
453	var resp *containerpb.Operation
454	err := gax.Invoke(ctx, func(ctx context.Context, settings gax.CallSettings) error {
455		var err error
456		resp, err = c.clusterManagerClient.SetLoggingService(ctx, req, settings.GRPC...)
457		return err
458	}, opts...)
459	if err != nil {
460		return nil, err
461	}
462	return resp, nil
463}
464
465// SetMonitoringService sets the monitoring service for a specific cluster.
466func (c *ClusterManagerClient) SetMonitoringService(ctx context.Context, req *containerpb.SetMonitoringServiceRequest, opts ...gax.CallOption) (*containerpb.Operation, error) {
467	if _, ok := ctx.Deadline(); !ok && !c.disableDeadlines {
468		cctx, cancel := context.WithTimeout(ctx, 45000*time.Millisecond)
469		defer cancel()
470		ctx = cctx
471	}
472	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())))
473	ctx = insertMetadata(ctx, c.xGoogMetadata, md)
474	opts = append(c.CallOptions.SetMonitoringService[0:len(c.CallOptions.SetMonitoringService):len(c.CallOptions.SetMonitoringService)], opts...)
475	var resp *containerpb.Operation
476	err := gax.Invoke(ctx, func(ctx context.Context, settings gax.CallSettings) error {
477		var err error
478		resp, err = c.clusterManagerClient.SetMonitoringService(ctx, req, settings.GRPC...)
479		return err
480	}, opts...)
481	if err != nil {
482		return nil, err
483	}
484	return resp, nil
485}
486
487// SetAddonsConfig sets the addons for a specific cluster.
488func (c *ClusterManagerClient) SetAddonsConfig(ctx context.Context, req *containerpb.SetAddonsConfigRequest, opts ...gax.CallOption) (*containerpb.Operation, error) {
489	if _, ok := ctx.Deadline(); !ok && !c.disableDeadlines {
490		cctx, cancel := context.WithTimeout(ctx, 45000*time.Millisecond)
491		defer cancel()
492		ctx = cctx
493	}
494	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())))
495	ctx = insertMetadata(ctx, c.xGoogMetadata, md)
496	opts = append(c.CallOptions.SetAddonsConfig[0:len(c.CallOptions.SetAddonsConfig):len(c.CallOptions.SetAddonsConfig)], opts...)
497	var resp *containerpb.Operation
498	err := gax.Invoke(ctx, func(ctx context.Context, settings gax.CallSettings) error {
499		var err error
500		resp, err = c.clusterManagerClient.SetAddonsConfig(ctx, req, settings.GRPC...)
501		return err
502	}, opts...)
503	if err != nil {
504		return nil, err
505	}
506	return resp, nil
507}
508
509// SetLocations sets the locations for a specific cluster.
510func (c *ClusterManagerClient) SetLocations(ctx context.Context, req *containerpb.SetLocationsRequest, opts ...gax.CallOption) (*containerpb.Operation, error) {
511	if _, ok := ctx.Deadline(); !ok && !c.disableDeadlines {
512		cctx, cancel := context.WithTimeout(ctx, 45000*time.Millisecond)
513		defer cancel()
514		ctx = cctx
515	}
516	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())))
517	ctx = insertMetadata(ctx, c.xGoogMetadata, md)
518	opts = append(c.CallOptions.SetLocations[0:len(c.CallOptions.SetLocations):len(c.CallOptions.SetLocations)], opts...)
519	var resp *containerpb.Operation
520	err := gax.Invoke(ctx, func(ctx context.Context, settings gax.CallSettings) error {
521		var err error
522		resp, err = c.clusterManagerClient.SetLocations(ctx, req, settings.GRPC...)
523		return err
524	}, opts...)
525	if err != nil {
526		return nil, err
527	}
528	return resp, nil
529}
530
531// UpdateMaster updates the master for a specific cluster.
532func (c *ClusterManagerClient) UpdateMaster(ctx context.Context, req *containerpb.UpdateMasterRequest, opts ...gax.CallOption) (*containerpb.Operation, error) {
533	if _, ok := ctx.Deadline(); !ok && !c.disableDeadlines {
534		cctx, cancel := context.WithTimeout(ctx, 45000*time.Millisecond)
535		defer cancel()
536		ctx = cctx
537	}
538	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())))
539	ctx = insertMetadata(ctx, c.xGoogMetadata, md)
540	opts = append(c.CallOptions.UpdateMaster[0:len(c.CallOptions.UpdateMaster):len(c.CallOptions.UpdateMaster)], opts...)
541	var resp *containerpb.Operation
542	err := gax.Invoke(ctx, func(ctx context.Context, settings gax.CallSettings) error {
543		var err error
544		resp, err = c.clusterManagerClient.UpdateMaster(ctx, req, settings.GRPC...)
545		return err
546	}, opts...)
547	if err != nil {
548		return nil, err
549	}
550	return resp, nil
551}
552
553// SetMasterAuth sets master auth materials. Currently supports changing the admin password
554// or a specific cluster, either via password generation or explicitly setting
555// the password.
556func (c *ClusterManagerClient) SetMasterAuth(ctx context.Context, req *containerpb.SetMasterAuthRequest, opts ...gax.CallOption) (*containerpb.Operation, error) {
557	if _, ok := ctx.Deadline(); !ok && !c.disableDeadlines {
558		cctx, cancel := context.WithTimeout(ctx, 45000*time.Millisecond)
559		defer cancel()
560		ctx = cctx
561	}
562	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())))
563	ctx = insertMetadata(ctx, c.xGoogMetadata, md)
564	opts = append(c.CallOptions.SetMasterAuth[0:len(c.CallOptions.SetMasterAuth):len(c.CallOptions.SetMasterAuth)], opts...)
565	var resp *containerpb.Operation
566	err := gax.Invoke(ctx, func(ctx context.Context, settings gax.CallSettings) error {
567		var err error
568		resp, err = c.clusterManagerClient.SetMasterAuth(ctx, req, settings.GRPC...)
569		return err
570	}, opts...)
571	if err != nil {
572		return nil, err
573	}
574	return resp, nil
575}
576
577// DeleteCluster deletes the cluster, including the Kubernetes endpoint and all worker
578// nodes.
579//
580// Firewalls and routes that were configured during cluster creation
581// are also deleted.
582//
583// Other Google Compute Engine resources that might be in use by the cluster,
584// such as load balancer resources, are not deleted if they weren’t present
585// when the cluster was initially created.
586func (c *ClusterManagerClient) DeleteCluster(ctx context.Context, req *containerpb.DeleteClusterRequest, opts ...gax.CallOption) (*containerpb.Operation, error) {
587	if _, ok := ctx.Deadline(); !ok && !c.disableDeadlines {
588		cctx, cancel := context.WithTimeout(ctx, 20000*time.Millisecond)
589		defer cancel()
590		ctx = cctx
591	}
592	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())))
593	ctx = insertMetadata(ctx, c.xGoogMetadata, md)
594	opts = append(c.CallOptions.DeleteCluster[0:len(c.CallOptions.DeleteCluster):len(c.CallOptions.DeleteCluster)], opts...)
595	var resp *containerpb.Operation
596	err := gax.Invoke(ctx, func(ctx context.Context, settings gax.CallSettings) error {
597		var err error
598		resp, err = c.clusterManagerClient.DeleteCluster(ctx, req, settings.GRPC...)
599		return err
600	}, opts...)
601	if err != nil {
602		return nil, err
603	}
604	return resp, nil
605}
606
607// ListOperations lists all operations in a project in a specific zone or all zones.
608func (c *ClusterManagerClient) ListOperations(ctx context.Context, req *containerpb.ListOperationsRequest, opts ...gax.CallOption) (*containerpb.ListOperationsResponse, error) {
609	if _, ok := ctx.Deadline(); !ok && !c.disableDeadlines {
610		cctx, cancel := context.WithTimeout(ctx, 20000*time.Millisecond)
611		defer cancel()
612		ctx = cctx
613	}
614	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())))
615	ctx = insertMetadata(ctx, c.xGoogMetadata, md)
616	opts = append(c.CallOptions.ListOperations[0:len(c.CallOptions.ListOperations):len(c.CallOptions.ListOperations)], opts...)
617	var resp *containerpb.ListOperationsResponse
618	err := gax.Invoke(ctx, func(ctx context.Context, settings gax.CallSettings) error {
619		var err error
620		resp, err = c.clusterManagerClient.ListOperations(ctx, req, settings.GRPC...)
621		return err
622	}, opts...)
623	if err != nil {
624		return nil, err
625	}
626	return resp, nil
627}
628
629// GetOperation gets the specified operation.
630func (c *ClusterManagerClient) GetOperation(ctx context.Context, req *containerpb.GetOperationRequest, opts ...gax.CallOption) (*containerpb.Operation, error) {
631	if _, ok := ctx.Deadline(); !ok && !c.disableDeadlines {
632		cctx, cancel := context.WithTimeout(ctx, 20000*time.Millisecond)
633		defer cancel()
634		ctx = cctx
635	}
636	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())))
637	ctx = insertMetadata(ctx, c.xGoogMetadata, md)
638	opts = append(c.CallOptions.GetOperation[0:len(c.CallOptions.GetOperation):len(c.CallOptions.GetOperation)], opts...)
639	var resp *containerpb.Operation
640	err := gax.Invoke(ctx, func(ctx context.Context, settings gax.CallSettings) error {
641		var err error
642		resp, err = c.clusterManagerClient.GetOperation(ctx, req, settings.GRPC...)
643		return err
644	}, opts...)
645	if err != nil {
646		return nil, err
647	}
648	return resp, nil
649}
650
651// CancelOperation cancels the specified operation.
652func (c *ClusterManagerClient) CancelOperation(ctx context.Context, req *containerpb.CancelOperationRequest, opts ...gax.CallOption) error {
653	if _, ok := ctx.Deadline(); !ok && !c.disableDeadlines {
654		cctx, cancel := context.WithTimeout(ctx, 45000*time.Millisecond)
655		defer cancel()
656		ctx = cctx
657	}
658	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())))
659	ctx = insertMetadata(ctx, c.xGoogMetadata, md)
660	opts = append(c.CallOptions.CancelOperation[0:len(c.CallOptions.CancelOperation):len(c.CallOptions.CancelOperation)], opts...)
661	err := gax.Invoke(ctx, func(ctx context.Context, settings gax.CallSettings) error {
662		var err error
663		_, err = c.clusterManagerClient.CancelOperation(ctx, req, settings.GRPC...)
664		return err
665	}, opts...)
666	return err
667}
668
669// GetServerConfig returns configuration info about the Google Kubernetes Engine service.
670func (c *ClusterManagerClient) GetServerConfig(ctx context.Context, req *containerpb.GetServerConfigRequest, opts ...gax.CallOption) (*containerpb.ServerConfig, error) {
671	if _, ok := ctx.Deadline(); !ok && !c.disableDeadlines {
672		cctx, cancel := context.WithTimeout(ctx, 20000*time.Millisecond)
673		defer cancel()
674		ctx = cctx
675	}
676	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())))
677	ctx = insertMetadata(ctx, c.xGoogMetadata, md)
678	opts = append(c.CallOptions.GetServerConfig[0:len(c.CallOptions.GetServerConfig):len(c.CallOptions.GetServerConfig)], opts...)
679	var resp *containerpb.ServerConfig
680	err := gax.Invoke(ctx, func(ctx context.Context, settings gax.CallSettings) error {
681		var err error
682		resp, err = c.clusterManagerClient.GetServerConfig(ctx, req, settings.GRPC...)
683		return err
684	}, opts...)
685	if err != nil {
686		return nil, err
687	}
688	return resp, nil
689}
690
691// ListNodePools lists the node pools for a cluster.
692func (c *ClusterManagerClient) ListNodePools(ctx context.Context, req *containerpb.ListNodePoolsRequest, opts ...gax.CallOption) (*containerpb.ListNodePoolsResponse, error) {
693	if _, ok := ctx.Deadline(); !ok && !c.disableDeadlines {
694		cctx, cancel := context.WithTimeout(ctx, 20000*time.Millisecond)
695		defer cancel()
696		ctx = cctx
697	}
698	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())))
699	ctx = insertMetadata(ctx, c.xGoogMetadata, md)
700	opts = append(c.CallOptions.ListNodePools[0:len(c.CallOptions.ListNodePools):len(c.CallOptions.ListNodePools)], opts...)
701	var resp *containerpb.ListNodePoolsResponse
702	err := gax.Invoke(ctx, func(ctx context.Context, settings gax.CallSettings) error {
703		var err error
704		resp, err = c.clusterManagerClient.ListNodePools(ctx, req, settings.GRPC...)
705		return err
706	}, opts...)
707	if err != nil {
708		return nil, err
709	}
710	return resp, nil
711}
712
713// GetNodePool retrieves the requested node pool.
714func (c *ClusterManagerClient) GetNodePool(ctx context.Context, req *containerpb.GetNodePoolRequest, opts ...gax.CallOption) (*containerpb.NodePool, error) {
715	if _, ok := ctx.Deadline(); !ok && !c.disableDeadlines {
716		cctx, cancel := context.WithTimeout(ctx, 20000*time.Millisecond)
717		defer cancel()
718		ctx = cctx
719	}
720	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())))
721	ctx = insertMetadata(ctx, c.xGoogMetadata, md)
722	opts = append(c.CallOptions.GetNodePool[0:len(c.CallOptions.GetNodePool):len(c.CallOptions.GetNodePool)], opts...)
723	var resp *containerpb.NodePool
724	err := gax.Invoke(ctx, func(ctx context.Context, settings gax.CallSettings) error {
725		var err error
726		resp, err = c.clusterManagerClient.GetNodePool(ctx, req, settings.GRPC...)
727		return err
728	}, opts...)
729	if err != nil {
730		return nil, err
731	}
732	return resp, nil
733}
734
735// CreateNodePool creates a node pool for a cluster.
736func (c *ClusterManagerClient) CreateNodePool(ctx context.Context, req *containerpb.CreateNodePoolRequest, opts ...gax.CallOption) (*containerpb.Operation, error) {
737	if _, ok := ctx.Deadline(); !ok && !c.disableDeadlines {
738		cctx, cancel := context.WithTimeout(ctx, 45000*time.Millisecond)
739		defer cancel()
740		ctx = cctx
741	}
742	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())))
743	ctx = insertMetadata(ctx, c.xGoogMetadata, md)
744	opts = append(c.CallOptions.CreateNodePool[0:len(c.CallOptions.CreateNodePool):len(c.CallOptions.CreateNodePool)], opts...)
745	var resp *containerpb.Operation
746	err := gax.Invoke(ctx, func(ctx context.Context, settings gax.CallSettings) error {
747		var err error
748		resp, err = c.clusterManagerClient.CreateNodePool(ctx, req, settings.GRPC...)
749		return err
750	}, opts...)
751	if err != nil {
752		return nil, err
753	}
754	return resp, nil
755}
756
757// DeleteNodePool deletes a node pool from a cluster.
758func (c *ClusterManagerClient) DeleteNodePool(ctx context.Context, req *containerpb.DeleteNodePoolRequest, opts ...gax.CallOption) (*containerpb.Operation, error) {
759	if _, ok := ctx.Deadline(); !ok && !c.disableDeadlines {
760		cctx, cancel := context.WithTimeout(ctx, 20000*time.Millisecond)
761		defer cancel()
762		ctx = cctx
763	}
764	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())))
765	ctx = insertMetadata(ctx, c.xGoogMetadata, md)
766	opts = append(c.CallOptions.DeleteNodePool[0:len(c.CallOptions.DeleteNodePool):len(c.CallOptions.DeleteNodePool)], opts...)
767	var resp *containerpb.Operation
768	err := gax.Invoke(ctx, func(ctx context.Context, settings gax.CallSettings) error {
769		var err error
770		resp, err = c.clusterManagerClient.DeleteNodePool(ctx, req, settings.GRPC...)
771		return err
772	}, opts...)
773	if err != nil {
774		return nil, err
775	}
776	return resp, nil
777}
778
779// RollbackNodePoolUpgrade rolls back a previously Aborted or Failed NodePool upgrade.
780// This makes no changes if the last upgrade successfully completed.
781func (c *ClusterManagerClient) RollbackNodePoolUpgrade(ctx context.Context, req *containerpb.RollbackNodePoolUpgradeRequest, 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&%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())))
788	ctx = insertMetadata(ctx, c.xGoogMetadata, md)
789	opts = append(c.CallOptions.RollbackNodePoolUpgrade[0:len(c.CallOptions.RollbackNodePoolUpgrade):len(c.CallOptions.RollbackNodePoolUpgrade)], 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.RollbackNodePoolUpgrade(ctx, req, settings.GRPC...)
794		return err
795	}, opts...)
796	if err != nil {
797		return nil, err
798	}
799	return resp, nil
800}
801
802// SetNodePoolManagement sets the NodeManagement options for a node pool.
803func (c *ClusterManagerClient) SetNodePoolManagement(ctx context.Context, req *containerpb.SetNodePoolManagementRequest, opts ...gax.CallOption) (*containerpb.Operation, error) {
804	if _, ok := ctx.Deadline(); !ok && !c.disableDeadlines {
805		cctx, cancel := context.WithTimeout(ctx, 45000*time.Millisecond)
806		defer cancel()
807		ctx = cctx
808	}
809	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())))
810	ctx = insertMetadata(ctx, c.xGoogMetadata, md)
811	opts = append(c.CallOptions.SetNodePoolManagement[0:len(c.CallOptions.SetNodePoolManagement):len(c.CallOptions.SetNodePoolManagement)], opts...)
812	var resp *containerpb.Operation
813	err := gax.Invoke(ctx, func(ctx context.Context, settings gax.CallSettings) error {
814		var err error
815		resp, err = c.clusterManagerClient.SetNodePoolManagement(ctx, req, settings.GRPC...)
816		return err
817	}, opts...)
818	if err != nil {
819		return nil, err
820	}
821	return resp, nil
822}
823
824// SetLabels sets labels on a cluster.
825func (c *ClusterManagerClient) SetLabels(ctx context.Context, req *containerpb.SetLabelsRequest, opts ...gax.CallOption) (*containerpb.Operation, error) {
826	if _, ok := ctx.Deadline(); !ok && !c.disableDeadlines {
827		cctx, cancel := context.WithTimeout(ctx, 45000*time.Millisecond)
828		defer cancel()
829		ctx = cctx
830	}
831	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())))
832	ctx = insertMetadata(ctx, c.xGoogMetadata, md)
833	opts = append(c.CallOptions.SetLabels[0:len(c.CallOptions.SetLabels):len(c.CallOptions.SetLabels)], opts...)
834	var resp *containerpb.Operation
835	err := gax.Invoke(ctx, func(ctx context.Context, settings gax.CallSettings) error {
836		var err error
837		resp, err = c.clusterManagerClient.SetLabels(ctx, req, settings.GRPC...)
838		return err
839	}, opts...)
840	if err != nil {
841		return nil, err
842	}
843	return resp, nil
844}
845
846// SetLegacyAbac enables or disables the ABAC authorization mechanism on a cluster.
847func (c *ClusterManagerClient) SetLegacyAbac(ctx context.Context, req *containerpb.SetLegacyAbacRequest, opts ...gax.CallOption) (*containerpb.Operation, error) {
848	if _, ok := ctx.Deadline(); !ok && !c.disableDeadlines {
849		cctx, cancel := context.WithTimeout(ctx, 45000*time.Millisecond)
850		defer cancel()
851		ctx = cctx
852	}
853	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())))
854	ctx = insertMetadata(ctx, c.xGoogMetadata, md)
855	opts = append(c.CallOptions.SetLegacyAbac[0:len(c.CallOptions.SetLegacyAbac):len(c.CallOptions.SetLegacyAbac)], opts...)
856	var resp *containerpb.Operation
857	err := gax.Invoke(ctx, func(ctx context.Context, settings gax.CallSettings) error {
858		var err error
859		resp, err = c.clusterManagerClient.SetLegacyAbac(ctx, req, settings.GRPC...)
860		return err
861	}, opts...)
862	if err != nil {
863		return nil, err
864	}
865	return resp, nil
866}
867
868// StartIPRotation starts master IP rotation.
869func (c *ClusterManagerClient) StartIPRotation(ctx context.Context, req *containerpb.StartIPRotationRequest, opts ...gax.CallOption) (*containerpb.Operation, error) {
870	if _, ok := ctx.Deadline(); !ok && !c.disableDeadlines {
871		cctx, cancel := context.WithTimeout(ctx, 45000*time.Millisecond)
872		defer cancel()
873		ctx = cctx
874	}
875	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())))
876	ctx = insertMetadata(ctx, c.xGoogMetadata, md)
877	opts = append(c.CallOptions.StartIPRotation[0:len(c.CallOptions.StartIPRotation):len(c.CallOptions.StartIPRotation)], opts...)
878	var resp *containerpb.Operation
879	err := gax.Invoke(ctx, func(ctx context.Context, settings gax.CallSettings) error {
880		var err error
881		resp, err = c.clusterManagerClient.StartIPRotation(ctx, req, settings.GRPC...)
882		return err
883	}, opts...)
884	if err != nil {
885		return nil, err
886	}
887	return resp, nil
888}
889
890// CompleteIPRotation completes master IP rotation.
891func (c *ClusterManagerClient) CompleteIPRotation(ctx context.Context, req *containerpb.CompleteIPRotationRequest, opts ...gax.CallOption) (*containerpb.Operation, error) {
892	if _, ok := ctx.Deadline(); !ok && !c.disableDeadlines {
893		cctx, cancel := context.WithTimeout(ctx, 45000*time.Millisecond)
894		defer cancel()
895		ctx = cctx
896	}
897	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())))
898	ctx = insertMetadata(ctx, c.xGoogMetadata, md)
899	opts = append(c.CallOptions.CompleteIPRotation[0:len(c.CallOptions.CompleteIPRotation):len(c.CallOptions.CompleteIPRotation)], opts...)
900	var resp *containerpb.Operation
901	err := gax.Invoke(ctx, func(ctx context.Context, settings gax.CallSettings) error {
902		var err error
903		resp, err = c.clusterManagerClient.CompleteIPRotation(ctx, req, settings.GRPC...)
904		return err
905	}, opts...)
906	if err != nil {
907		return nil, err
908	}
909	return resp, nil
910}
911
912// SetNodePoolSize sets the size for a specific node pool.
913func (c *ClusterManagerClient) SetNodePoolSize(ctx context.Context, req *containerpb.SetNodePoolSizeRequest, opts ...gax.CallOption) (*containerpb.Operation, error) {
914	if _, ok := ctx.Deadline(); !ok && !c.disableDeadlines {
915		cctx, cancel := context.WithTimeout(ctx, 45000*time.Millisecond)
916		defer cancel()
917		ctx = cctx
918	}
919	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())))
920	ctx = insertMetadata(ctx, c.xGoogMetadata, md)
921	opts = append(c.CallOptions.SetNodePoolSize[0:len(c.CallOptions.SetNodePoolSize):len(c.CallOptions.SetNodePoolSize)], opts...)
922	var resp *containerpb.Operation
923	err := gax.Invoke(ctx, func(ctx context.Context, settings gax.CallSettings) error {
924		var err error
925		resp, err = c.clusterManagerClient.SetNodePoolSize(ctx, req, settings.GRPC...)
926		return err
927	}, opts...)
928	if err != nil {
929		return nil, err
930	}
931	return resp, nil
932}
933
934// SetNetworkPolicy enables or disables Network Policy for a cluster.
935func (c *ClusterManagerClient) SetNetworkPolicy(ctx context.Context, req *containerpb.SetNetworkPolicyRequest, opts ...gax.CallOption) (*containerpb.Operation, error) {
936	if _, ok := ctx.Deadline(); !ok && !c.disableDeadlines {
937		cctx, cancel := context.WithTimeout(ctx, 45000*time.Millisecond)
938		defer cancel()
939		ctx = cctx
940	}
941	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())))
942	ctx = insertMetadata(ctx, c.xGoogMetadata, md)
943	opts = append(c.CallOptions.SetNetworkPolicy[0:len(c.CallOptions.SetNetworkPolicy):len(c.CallOptions.SetNetworkPolicy)], opts...)
944	var resp *containerpb.Operation
945	err := gax.Invoke(ctx, func(ctx context.Context, settings gax.CallSettings) error {
946		var err error
947		resp, err = c.clusterManagerClient.SetNetworkPolicy(ctx, req, settings.GRPC...)
948		return err
949	}, opts...)
950	if err != nil {
951		return nil, err
952	}
953	return resp, nil
954}
955
956// SetMaintenancePolicy sets the maintenance policy for a cluster.
957func (c *ClusterManagerClient) SetMaintenancePolicy(ctx context.Context, req *containerpb.SetMaintenancePolicyRequest, opts ...gax.CallOption) (*containerpb.Operation, error) {
958	if _, ok := ctx.Deadline(); !ok && !c.disableDeadlines {
959		cctx, cancel := context.WithTimeout(ctx, 45000*time.Millisecond)
960		defer cancel()
961		ctx = cctx
962	}
963	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())))
964	ctx = insertMetadata(ctx, c.xGoogMetadata, md)
965	opts = append(c.CallOptions.SetMaintenancePolicy[0:len(c.CallOptions.SetMaintenancePolicy):len(c.CallOptions.SetMaintenancePolicy)], opts...)
966	var resp *containerpb.Operation
967	err := gax.Invoke(ctx, func(ctx context.Context, settings gax.CallSettings) error {
968		var err error
969		resp, err = c.clusterManagerClient.SetMaintenancePolicy(ctx, req, settings.GRPC...)
970		return err
971	}, opts...)
972	if err != nil {
973		return nil, err
974	}
975	return resp, nil
976}
977
978// ListUsableSubnetworks lists subnetworks that are usable for creating clusters in a project.
979func (c *ClusterManagerClient) ListUsableSubnetworks(ctx context.Context, req *containerpb.ListUsableSubnetworksRequest, opts ...gax.CallOption) *UsableSubnetworkIterator {
980	md := metadata.Pairs("x-goog-request-params", fmt.Sprintf("%s=%v", "parent", url.QueryEscape(req.GetParent())))
981	ctx = insertMetadata(ctx, c.xGoogMetadata, md)
982	opts = append(c.CallOptions.ListUsableSubnetworks[0:len(c.CallOptions.ListUsableSubnetworks):len(c.CallOptions.ListUsableSubnetworks)], opts...)
983	it := &UsableSubnetworkIterator{}
984	req = proto.Clone(req).(*containerpb.ListUsableSubnetworksRequest)
985	it.InternalFetch = func(pageSize int, pageToken string) ([]*containerpb.UsableSubnetwork, string, error) {
986		var resp *containerpb.ListUsableSubnetworksResponse
987		req.PageToken = pageToken
988		if pageSize > math.MaxInt32 {
989			req.PageSize = math.MaxInt32
990		} else {
991			req.PageSize = int32(pageSize)
992		}
993		err := gax.Invoke(ctx, func(ctx context.Context, settings gax.CallSettings) error {
994			var err error
995			resp, err = c.clusterManagerClient.ListUsableSubnetworks(ctx, req, settings.GRPC...)
996			return err
997		}, opts...)
998		if err != nil {
999			return nil, "", err
1000		}
1001
1002		it.Response = resp
1003		return resp.GetSubnetworks(), resp.GetNextPageToken(), nil
1004	}
1005	fetch := func(pageSize int, pageToken string) (string, error) {
1006		items, nextPageToken, err := it.InternalFetch(pageSize, pageToken)
1007		if err != nil {
1008			return "", err
1009		}
1010		it.items = append(it.items, items...)
1011		return nextPageToken, nil
1012	}
1013	it.pageInfo, it.nextFunc = iterator.NewPageInfo(fetch, it.bufLen, it.takeBuf)
1014	it.pageInfo.MaxSize = int(req.GetPageSize())
1015	it.pageInfo.Token = req.GetPageToken()
1016	return it
1017}
1018
1019// UsableSubnetworkIterator manages a stream of *containerpb.UsableSubnetwork.
1020type UsableSubnetworkIterator struct {
1021	items    []*containerpb.UsableSubnetwork
1022	pageInfo *iterator.PageInfo
1023	nextFunc func() error
1024
1025	// Response is the raw response for the current page.
1026	// It must be cast to the RPC response type.
1027	// Calling Next() or InternalFetch() updates this value.
1028	Response interface{}
1029
1030	// InternalFetch is for use by the Google Cloud Libraries only.
1031	// It is not part of the stable interface of this package.
1032	//
1033	// InternalFetch returns results from a single call to the underlying RPC.
1034	// The number of results is no greater than pageSize.
1035	// If there are no more results, nextPageToken is empty and err is nil.
1036	InternalFetch func(pageSize int, pageToken string) (results []*containerpb.UsableSubnetwork, nextPageToken string, err error)
1037}
1038
1039// PageInfo supports pagination. See the google.golang.org/api/iterator package for details.
1040func (it *UsableSubnetworkIterator) PageInfo() *iterator.PageInfo {
1041	return it.pageInfo
1042}
1043
1044// Next returns the next result. Its second return value is iterator.Done if there are no more
1045// results. Once Next returns Done, all subsequent calls will return Done.
1046func (it *UsableSubnetworkIterator) Next() (*containerpb.UsableSubnetwork, error) {
1047	var item *containerpb.UsableSubnetwork
1048	if err := it.nextFunc(); err != nil {
1049		return item, err
1050	}
1051	item = it.items[0]
1052	it.items = it.items[1:]
1053	return item, nil
1054}
1055
1056func (it *UsableSubnetworkIterator) bufLen() int {
1057	return len(it.items)
1058}
1059
1060func (it *UsableSubnetworkIterator) takeBuf() interface{} {
1061	b := it.items
1062	it.items = nil
1063	return b
1064}
1065