Copyright 2020 Google LLC Licensed under the Apache License, Version 2.0 (the "License"); you may not use this file except in compliance with the License. You may obtain a copy of the License at https://www.apache.org/licenses/LICENSE-2.0 Unless required by applicable law or agreed to in writing, software distributed under the License is distributed on an "AS IS" BASIS, WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied. See the License for the specific language governing permissions and limitations under the License.
Code generated by protoc-gen-go_gapic. DO NOT EDIT.

package container

import (
	
	
	
	
	

	
	gax 
	
	
	gtransport 
	containerpb 
	
	
	
)

var newClusterManagerClientHook clientHook
ClusterManagerCallOptions contains the retry settings for each method of ClusterManagerClient.
type ClusterManagerCallOptions struct {
	ListClusters            []gax.CallOption
	GetCluster              []gax.CallOption
	CreateCluster           []gax.CallOption
	UpdateCluster           []gax.CallOption
	UpdateNodePool          []gax.CallOption
	SetNodePoolAutoscaling  []gax.CallOption
	SetLoggingService       []gax.CallOption
	SetMonitoringService    []gax.CallOption
	SetAddonsConfig         []gax.CallOption
	SetLocations            []gax.CallOption
	UpdateMaster            []gax.CallOption
	SetMasterAuth           []gax.CallOption
	DeleteCluster           []gax.CallOption
	ListOperations          []gax.CallOption
	GetOperation            []gax.CallOption
	CancelOperation         []gax.CallOption
	GetServerConfig         []gax.CallOption
	ListNodePools           []gax.CallOption
	GetNodePool             []gax.CallOption
	CreateNodePool          []gax.CallOption
	DeleteNodePool          []gax.CallOption
	RollbackNodePoolUpgrade []gax.CallOption
	SetNodePoolManagement   []gax.CallOption
	SetLabels               []gax.CallOption
	SetLegacyAbac           []gax.CallOption
	StartIPRotation         []gax.CallOption
	CompleteIPRotation      []gax.CallOption
	SetNodePoolSize         []gax.CallOption
	SetNetworkPolicy        []gax.CallOption
	SetMaintenancePolicy    []gax.CallOption
	ListUsableSubnetworks   []gax.CallOption
}

func () []option.ClientOption {
	return []option.ClientOption{
		option.WithEndpoint("container.googleapis.com:443"),
		option.WithGRPCDialOption(grpc.WithDisableServiceConfig()),
		option.WithScopes(DefaultAuthScopes()...),
		option.WithGRPCDialOption(grpc.WithDefaultCallOptions(
			grpc.MaxCallRecvMsgSize(math.MaxInt32))),
	}
}

func () *ClusterManagerCallOptions {
	return &ClusterManagerCallOptions{
		ListClusters: []gax.CallOption{
			gax.WithRetry(func() gax.Retryer {
				return gax.OnCodes([]codes.Code{
					codes.Unavailable,
					codes.DeadlineExceeded,
				}, gax.Backoff{
					Initial:    100 * time.Millisecond,
					Max:        60000 * time.Millisecond,
					Multiplier: 1.30,
				})
			}),
		},
		GetCluster: []gax.CallOption{
			gax.WithRetry(func() gax.Retryer {
				return gax.OnCodes([]codes.Code{
					codes.Unavailable,
					codes.DeadlineExceeded,
				}, gax.Backoff{
					Initial:    100 * time.Millisecond,
					Max:        60000 * time.Millisecond,
					Multiplier: 1.30,
				})
			}),
		},
		CreateCluster:          []gax.CallOption{},
		UpdateCluster:          []gax.CallOption{},
		UpdateNodePool:         []gax.CallOption{},
		SetNodePoolAutoscaling: []gax.CallOption{},
		SetLoggingService:      []gax.CallOption{},
		SetMonitoringService:   []gax.CallOption{},
		SetAddonsConfig:        []gax.CallOption{},
		SetLocations:           []gax.CallOption{},
		UpdateMaster:           []gax.CallOption{},
		SetMasterAuth:          []gax.CallOption{},
		DeleteCluster: []gax.CallOption{
			gax.WithRetry(func() gax.Retryer {
				return gax.OnCodes([]codes.Code{
					codes.Unavailable,
					codes.DeadlineExceeded,
				}, gax.Backoff{
					Initial:    100 * time.Millisecond,
					Max:        60000 * time.Millisecond,
					Multiplier: 1.30,
				})
			}),
		},
		ListOperations: []gax.CallOption{
			gax.WithRetry(func() gax.Retryer {
				return gax.OnCodes([]codes.Code{
					codes.Unavailable,
					codes.DeadlineExceeded,
				}, gax.Backoff{
					Initial:    100 * time.Millisecond,
					Max:        60000 * time.Millisecond,
					Multiplier: 1.30,
				})
			}),
		},
		GetOperation: []gax.CallOption{
			gax.WithRetry(func() gax.Retryer {
				return gax.OnCodes([]codes.Code{
					codes.Unavailable,
					codes.DeadlineExceeded,
				}, gax.Backoff{
					Initial:    100 * time.Millisecond,
					Max:        60000 * time.Millisecond,
					Multiplier: 1.30,
				})
			}),
		},
		CancelOperation: []gax.CallOption{},
		GetServerConfig: []gax.CallOption{
			gax.WithRetry(func() gax.Retryer {
				return gax.OnCodes([]codes.Code{
					codes.Unavailable,
					codes.DeadlineExceeded,
				}, gax.Backoff{
					Initial:    100 * time.Millisecond,
					Max:        60000 * time.Millisecond,
					Multiplier: 1.30,
				})
			}),
		},
		ListNodePools: []gax.CallOption{
			gax.WithRetry(func() gax.Retryer {
				return gax.OnCodes([]codes.Code{
					codes.Unavailable,
					codes.DeadlineExceeded,
				}, gax.Backoff{
					Initial:    100 * time.Millisecond,
					Max:        60000 * time.Millisecond,
					Multiplier: 1.30,
				})
			}),
		},
		GetNodePool: []gax.CallOption{
			gax.WithRetry(func() gax.Retryer {
				return gax.OnCodes([]codes.Code{
					codes.Unavailable,
					codes.DeadlineExceeded,
				}, gax.Backoff{
					Initial:    100 * time.Millisecond,
					Max:        60000 * time.Millisecond,
					Multiplier: 1.30,
				})
			}),
		},
		CreateNodePool: []gax.CallOption{},
		DeleteNodePool: []gax.CallOption{
			gax.WithRetry(func() gax.Retryer {
				return gax.OnCodes([]codes.Code{
					codes.Unavailable,
					codes.DeadlineExceeded,
				}, gax.Backoff{
					Initial:    100 * time.Millisecond,
					Max:        60000 * time.Millisecond,
					Multiplier: 1.30,
				})
			}),
		},
		RollbackNodePoolUpgrade: []gax.CallOption{},
		SetNodePoolManagement:   []gax.CallOption{},
		SetLabels:               []gax.CallOption{},
		SetLegacyAbac:           []gax.CallOption{},
		StartIPRotation:         []gax.CallOption{},
		CompleteIPRotation:      []gax.CallOption{},
		SetNodePoolSize:         []gax.CallOption{},
		SetNetworkPolicy:        []gax.CallOption{},
		SetMaintenancePolicy:    []gax.CallOption{},
		ListUsableSubnetworks:   []gax.CallOption{},
	}
}
ClusterManagerClient is a client for interacting with Kubernetes Engine API. Methods, except Close, may be called concurrently. However, fields must not be modified concurrently with method calls.
Connection pool of gRPC connections to the service.
flag to opt out of default deadlines via GOOGLE_API_GO_EXPERIMENTAL_DISABLE_DEFAULT_DEADLINE
The call options for this service.
The x-goog-* metadata to be sent with each request.
NewClusterManagerClient creates a new cluster manager client. Google Kubernetes Engine Cluster Manager v1
func ( context.Context,  ...option.ClientOption) (*ClusterManagerClient, error) {
	 := defaultClusterManagerClientOptions()

	if newClusterManagerClientHook != nil {
		,  := newClusterManagerClientHook(, clientHookParams{})
		if  != nil {
			return nil, 
		}
		 = append(, ...)
	}

	,  := checkDisableDeadlines()
	if  != nil {
		return nil, 
	}

	,  := gtransport.DialPool(, append(, ...)...)
	if  != nil {
		return nil, 
	}
	 := &ClusterManagerClient{
		connPool:         ,
		disableDeadlines: ,
		CallOptions:      defaultClusterManagerCallOptions(),

		clusterManagerClient: containerpb.NewClusterManagerClient(),
	}
	.setGoogleClientInfo()

	return , nil
}
Connection returns a connection to the API service. Deprecated.
Close closes the connection to the API service. The user should invoke this when the client is no longer required.
func ( *ClusterManagerClient) () error {
	return .connPool.Close()
}
setGoogleClientInfo sets the name and version of the application in the `x-goog-api-client` header passed on each request. Intended for use by Google-written clients.
func ( *ClusterManagerClient) ( ...string) {
	 := append([]string{"gl-go", versionGo()}, ...)
	 = append(, "gapic", versionClient, "gax", gax.Version, "grpc", grpc.Version)
	.xGoogMetadata = metadata.Pairs("x-goog-api-client", gax.XGoogHeader(...))
}
ListClusters lists all clusters owned by a project in either the specified zone or all zones.
func ( *ClusterManagerClient) ( context.Context,  *containerpb.ListClustersRequest,  ...gax.CallOption) (*containerpb.ListClustersResponse, error) {
	if ,  := .Deadline(); ! && !.disableDeadlines {
		,  := context.WithTimeout(, 20000*time.Millisecond)
		defer ()
		 = 
	}
	 := metadata.Pairs("x-goog-request-params", fmt.Sprintf("%s=%v&%s=%v&%s=%v", "parent", url.QueryEscape(.GetParent()), "project_id", url.QueryEscape(.GetProjectId()), "zone", url.QueryEscape(.GetZone())))
	 = insertMetadata(, .xGoogMetadata, )
	 = append(.CallOptions.ListClusters[0:len(.CallOptions.ListClusters):len(.CallOptions.ListClusters)], ...)
	var  *containerpb.ListClustersResponse
	 := gax.Invoke(, func( context.Context,  gax.CallSettings) error {
		var  error
		,  = .clusterManagerClient.ListClusters(, , .GRPC...)
		return 
	}, ...)
	if  != nil {
		return nil, 
	}
	return , nil
}
GetCluster gets the details of a specific cluster.
func ( *ClusterManagerClient) ( context.Context,  *containerpb.GetClusterRequest,  ...gax.CallOption) (*containerpb.Cluster, error) {
	if ,  := .Deadline(); ! && !.disableDeadlines {
		,  := context.WithTimeout(, 20000*time.Millisecond)
		defer ()
		 = 
	}
	 := metadata.Pairs("x-goog-request-params", fmt.Sprintf("%s=%v&%s=%v&%s=%v&%s=%v", "name", url.QueryEscape(.GetName()), "project_id", url.QueryEscape(.GetProjectId()), "zone", url.QueryEscape(.GetZone()), "cluster_id", url.QueryEscape(.GetClusterId())))
	 = insertMetadata(, .xGoogMetadata, )
	 = append(.CallOptions.GetCluster[0:len(.CallOptions.GetCluster):len(.CallOptions.GetCluster)], ...)
	var  *containerpb.Cluster
	 := gax.Invoke(, func( context.Context,  gax.CallSettings) error {
		var  error
		,  = .clusterManagerClient.GetCluster(, , .GRPC...)
		return 
	}, ...)
	if  != nil {
		return nil, 
	}
	return , nil
}
CreateCluster creates a cluster, consisting of the specified number and type of Google Compute Engine instances. By default, the cluster is created in the project’s default network (at https://cloud.google.com/compute/docs/networks-and-firewalls#networks). One firewall is added for the cluster. After cluster creation, the Kubelet creates routes for each node to allow the containers on that node to communicate with all other instances in the cluster. Finally, an entry is added to the project’s global metadata indicating which CIDR range the cluster is using.
func ( *ClusterManagerClient) ( context.Context,  *containerpb.CreateClusterRequest,  ...gax.CallOption) (*containerpb.Operation, error) {
	if ,  := .Deadline(); ! && !.disableDeadlines {
		,  := context.WithTimeout(, 45000*time.Millisecond)
		defer ()
		 = 
	}
	 := metadata.Pairs("x-goog-request-params", fmt.Sprintf("%s=%v&%s=%v&%s=%v", "parent", url.QueryEscape(.GetParent()), "project_id", url.QueryEscape(.GetProjectId()), "zone", url.QueryEscape(.GetZone())))
	 = insertMetadata(, .xGoogMetadata, )
	 = append(.CallOptions.CreateCluster[0:len(.CallOptions.CreateCluster):len(.CallOptions.CreateCluster)], ...)
	var  *containerpb.Operation
	 := gax.Invoke(, func( context.Context,  gax.CallSettings) error {
		var  error
		,  = .clusterManagerClient.CreateCluster(, , .GRPC...)
		return 
	}, ...)
	if  != nil {
		return nil, 
	}
	return , nil
}
UpdateCluster updates the settings of a specific cluster.
func ( *ClusterManagerClient) ( context.Context,  *containerpb.UpdateClusterRequest,  ...gax.CallOption) (*containerpb.Operation, error) {
	if ,  := .Deadline(); ! && !.disableDeadlines {
		,  := context.WithTimeout(, 45000*time.Millisecond)
		defer ()
		 = 
	}
	 := metadata.Pairs("x-goog-request-params", fmt.Sprintf("%s=%v&%s=%v&%s=%v&%s=%v", "name", url.QueryEscape(.GetName()), "project_id", url.QueryEscape(.GetProjectId()), "zone", url.QueryEscape(.GetZone()), "cluster_id", url.QueryEscape(.GetClusterId())))
	 = insertMetadata(, .xGoogMetadata, )
	 = append(.CallOptions.UpdateCluster[0:len(.CallOptions.UpdateCluster):len(.CallOptions.UpdateCluster)], ...)
	var  *containerpb.Operation
	 := gax.Invoke(, func( context.Context,  gax.CallSettings) error {
		var  error
		,  = .clusterManagerClient.UpdateCluster(, , .GRPC...)
		return 
	}, ...)
	if  != nil {
		return nil, 
	}
	return , nil
}
UpdateNodePool updates the version and/or image type for the specified node pool.
func ( *ClusterManagerClient) ( context.Context,  *containerpb.UpdateNodePoolRequest,  ...gax.CallOption) (*containerpb.Operation, error) {
	if ,  := .Deadline(); ! && !.disableDeadlines {
		,  := context.WithTimeout(, 45000*time.Millisecond)
		defer ()
		 = 
	}
	 := metadata.Pairs("x-goog-request-params", fmt.Sprintf("%s=%v&%s=%v&%s=%v&%s=%v&%s=%v", "name", url.QueryEscape(.GetName()), "project_id", url.QueryEscape(.GetProjectId()), "zone", url.QueryEscape(.GetZone()), "cluster_id", url.QueryEscape(.GetClusterId()), "node_pool_id", url.QueryEscape(.GetNodePoolId())))
	 = insertMetadata(, .xGoogMetadata, )
	 = append(.CallOptions.UpdateNodePool[0:len(.CallOptions.UpdateNodePool):len(.CallOptions.UpdateNodePool)], ...)
	var  *containerpb.Operation
	 := gax.Invoke(, func( context.Context,  gax.CallSettings) error {
		var  error
		,  = .clusterManagerClient.UpdateNodePool(, , .GRPC...)
		return 
	}, ...)
	if  != nil {
		return nil, 
	}
	return , nil
}
SetNodePoolAutoscaling sets the autoscaling settings for the specified node pool.
func ( *ClusterManagerClient) ( context.Context,  *containerpb.SetNodePoolAutoscalingRequest,  ...gax.CallOption) (*containerpb.Operation, error) {
	if ,  := .Deadline(); ! && !.disableDeadlines {
		,  := context.WithTimeout(, 45000*time.Millisecond)
		defer ()
		 = 
	}
	 := metadata.Pairs("x-goog-request-params", fmt.Sprintf("%s=%v&%s=%v&%s=%v&%s=%v&%s=%v", "name", url.QueryEscape(.GetName()), "project_id", url.QueryEscape(.GetProjectId()), "zone", url.QueryEscape(.GetZone()), "cluster_id", url.QueryEscape(.GetClusterId()), "node_pool_id", url.QueryEscape(.GetNodePoolId())))
	 = insertMetadata(, .xGoogMetadata, )
	 = append(.CallOptions.SetNodePoolAutoscaling[0:len(.CallOptions.SetNodePoolAutoscaling):len(.CallOptions.SetNodePoolAutoscaling)], ...)
	var  *containerpb.Operation
	 := gax.Invoke(, func( context.Context,  gax.CallSettings) error {
		var  error
		,  = .clusterManagerClient.SetNodePoolAutoscaling(, , .GRPC...)
		return 
	}, ...)
	if  != nil {
		return nil, 
	}
	return , nil
}
SetLoggingService sets the logging service for a specific cluster.
func ( *ClusterManagerClient) ( context.Context,  *containerpb.SetLoggingServiceRequest,  ...gax.CallOption) (*containerpb.Operation, error) {
	if ,  := .Deadline(); ! && !.disableDeadlines {
		,  := context.WithTimeout(, 45000*time.Millisecond)
		defer ()
		 = 
	}
	 := metadata.Pairs("x-goog-request-params", fmt.Sprintf("%s=%v&%s=%v&%s=%v&%s=%v", "name", url.QueryEscape(.GetName()), "project_id", url.QueryEscape(.GetProjectId()), "zone", url.QueryEscape(.GetZone()), "cluster_id", url.QueryEscape(.GetClusterId())))
	 = insertMetadata(, .xGoogMetadata, )
	 = append(.CallOptions.SetLoggingService[0:len(.CallOptions.SetLoggingService):len(.CallOptions.SetLoggingService)], ...)
	var  *containerpb.Operation
	 := gax.Invoke(, func( context.Context,  gax.CallSettings) error {
		var  error
		,  = .clusterManagerClient.SetLoggingService(, , .GRPC...)
		return 
	}, ...)
	if  != nil {
		return nil, 
	}
	return , nil
}
SetMonitoringService sets the monitoring service for a specific cluster.
func ( *ClusterManagerClient) ( context.Context,  *containerpb.SetMonitoringServiceRequest,  ...gax.CallOption) (*containerpb.Operation, error) {
	if ,  := .Deadline(); ! && !.disableDeadlines {
		,  := context.WithTimeout(, 45000*time.Millisecond)
		defer ()
		 = 
	}
	 := metadata.Pairs("x-goog-request-params", fmt.Sprintf("%s=%v&%s=%v&%s=%v&%s=%v", "name", url.QueryEscape(.GetName()), "project_id", url.QueryEscape(.GetProjectId()), "zone", url.QueryEscape(.GetZone()), "cluster_id", url.QueryEscape(.GetClusterId())))
	 = insertMetadata(, .xGoogMetadata, )
	 = append(.CallOptions.SetMonitoringService[0:len(.CallOptions.SetMonitoringService):len(.CallOptions.SetMonitoringService)], ...)
	var  *containerpb.Operation
	 := gax.Invoke(, func( context.Context,  gax.CallSettings) error {
		var  error
		,  = .clusterManagerClient.SetMonitoringService(, , .GRPC...)
		return 
	}, ...)
	if  != nil {
		return nil, 
	}
	return , nil
}
SetAddonsConfig sets the addons for a specific cluster.
func ( *ClusterManagerClient) ( context.Context,  *containerpb.SetAddonsConfigRequest,  ...gax.CallOption) (*containerpb.Operation, error) {
	if ,  := .Deadline(); ! && !.disableDeadlines {
		,  := context.WithTimeout(, 45000*time.Millisecond)
		defer ()
		 = 
	}
	 := metadata.Pairs("x-goog-request-params", fmt.Sprintf("%s=%v&%s=%v&%s=%v&%s=%v", "name", url.QueryEscape(.GetName()), "project_id", url.QueryEscape(.GetProjectId()), "zone", url.QueryEscape(.GetZone()), "cluster_id", url.QueryEscape(.GetClusterId())))
	 = insertMetadata(, .xGoogMetadata, )
	 = append(.CallOptions.SetAddonsConfig[0:len(.CallOptions.SetAddonsConfig):len(.CallOptions.SetAddonsConfig)], ...)
	var  *containerpb.Operation
	 := gax.Invoke(, func( context.Context,  gax.CallSettings) error {
		var  error
		,  = .clusterManagerClient.SetAddonsConfig(, , .GRPC...)
		return 
	}, ...)
	if  != nil {
		return nil, 
	}
	return , nil
}
SetLocations sets the locations for a specific cluster.
func ( *ClusterManagerClient) ( context.Context,  *containerpb.SetLocationsRequest,  ...gax.CallOption) (*containerpb.Operation, error) {
	if ,  := .Deadline(); ! && !.disableDeadlines {
		,  := context.WithTimeout(, 45000*time.Millisecond)
		defer ()
		 = 
	}
	 := metadata.Pairs("x-goog-request-params", fmt.Sprintf("%s=%v&%s=%v&%s=%v&%s=%v", "name", url.QueryEscape(.GetName()), "project_id", url.QueryEscape(.GetProjectId()), "zone", url.QueryEscape(.GetZone()), "cluster_id", url.QueryEscape(.GetClusterId())))
	 = insertMetadata(, .xGoogMetadata, )
	 = append(.CallOptions.SetLocations[0:len(.CallOptions.SetLocations):len(.CallOptions.SetLocations)], ...)
	var  *containerpb.Operation
	 := gax.Invoke(, func( context.Context,  gax.CallSettings) error {
		var  error
		,  = .clusterManagerClient.SetLocations(, , .GRPC...)
		return 
	}, ...)
	if  != nil {
		return nil, 
	}
	return , nil
}
UpdateMaster updates the master for a specific cluster.
func ( *ClusterManagerClient) ( context.Context,  *containerpb.UpdateMasterRequest,  ...gax.CallOption) (*containerpb.Operation, error) {
	if ,  := .Deadline(); ! && !.disableDeadlines {
		,  := context.WithTimeout(, 45000*time.Millisecond)
		defer ()
		 = 
	}
	 := metadata.Pairs("x-goog-request-params", fmt.Sprintf("%s=%v&%s=%v&%s=%v&%s=%v", "name", url.QueryEscape(.GetName()), "project_id", url.QueryEscape(.GetProjectId()), "zone", url.QueryEscape(.GetZone()), "cluster_id", url.QueryEscape(.GetClusterId())))
	 = insertMetadata(, .xGoogMetadata, )
	 = append(.CallOptions.UpdateMaster[0:len(.CallOptions.UpdateMaster):len(.CallOptions.UpdateMaster)], ...)
	var  *containerpb.Operation
	 := gax.Invoke(, func( context.Context,  gax.CallSettings) error {
		var  error
		,  = .clusterManagerClient.UpdateMaster(, , .GRPC...)
		return 
	}, ...)
	if  != nil {
		return nil, 
	}
	return , nil
}
SetMasterAuth sets master auth materials. Currently supports changing the admin password or a specific cluster, either via password generation or explicitly setting the password.
func ( *ClusterManagerClient) ( context.Context,  *containerpb.SetMasterAuthRequest,  ...gax.CallOption) (*containerpb.Operation, error) {
	if ,  := .Deadline(); ! && !.disableDeadlines {
		,  := context.WithTimeout(, 45000*time.Millisecond)
		defer ()
		 = 
	}
	 := metadata.Pairs("x-goog-request-params", fmt.Sprintf("%s=%v&%s=%v&%s=%v&%s=%v", "name", url.QueryEscape(.GetName()), "project_id", url.QueryEscape(.GetProjectId()), "zone", url.QueryEscape(.GetZone()), "cluster_id", url.QueryEscape(.GetClusterId())))
	 = insertMetadata(, .xGoogMetadata, )
	 = append(.CallOptions.SetMasterAuth[0:len(.CallOptions.SetMasterAuth):len(.CallOptions.SetMasterAuth)], ...)
	var  *containerpb.Operation
	 := gax.Invoke(, func( context.Context,  gax.CallSettings) error {
		var  error
		,  = .clusterManagerClient.SetMasterAuth(, , .GRPC...)
		return 
	}, ...)
	if  != nil {
		return nil, 
	}
	return , nil
}
DeleteCluster deletes the cluster, including the Kubernetes endpoint and all worker nodes. Firewalls and routes that were configured during cluster creation are also deleted. Other Google Compute Engine resources that might be in use by the cluster, such as load balancer resources, are not deleted if they weren’t present when the cluster was initially created.
func ( *ClusterManagerClient) ( context.Context,  *containerpb.DeleteClusterRequest,  ...gax.CallOption) (*containerpb.Operation, error) {
	if ,  := .Deadline(); ! && !.disableDeadlines {
		,  := context.WithTimeout(, 20000*time.Millisecond)
		defer ()
		 = 
	}
	 := metadata.Pairs("x-goog-request-params", fmt.Sprintf("%s=%v&%s=%v&%s=%v&%s=%v", "name", url.QueryEscape(.GetName()), "project_id", url.QueryEscape(.GetProjectId()), "zone", url.QueryEscape(.GetZone()), "cluster_id", url.QueryEscape(.GetClusterId())))
	 = insertMetadata(, .xGoogMetadata, )
	 = append(.CallOptions.DeleteCluster[0:len(.CallOptions.DeleteCluster):len(.CallOptions.DeleteCluster)], ...)
	var  *containerpb.Operation
	 := gax.Invoke(, func( context.Context,  gax.CallSettings) error {
		var  error
		,  = .clusterManagerClient.DeleteCluster(, , .GRPC...)
		return 
	}, ...)
	if  != nil {
		return nil, 
	}
	return , nil
}
ListOperations lists all operations in a project in a specific zone or all zones.
func ( *ClusterManagerClient) ( context.Context,  *containerpb.ListOperationsRequest,  ...gax.CallOption) (*containerpb.ListOperationsResponse, error) {
	if ,  := .Deadline(); ! && !.disableDeadlines {
		,  := context.WithTimeout(, 20000*time.Millisecond)
		defer ()
		 = 
	}
	 := metadata.Pairs("x-goog-request-params", fmt.Sprintf("%s=%v&%s=%v&%s=%v", "parent", url.QueryEscape(.GetParent()), "project_id", url.QueryEscape(.GetProjectId()), "zone", url.QueryEscape(.GetZone())))
	 = insertMetadata(, .xGoogMetadata, )
	 = append(.CallOptions.ListOperations[0:len(.CallOptions.ListOperations):len(.CallOptions.ListOperations)], ...)
	var  *containerpb.ListOperationsResponse
	 := gax.Invoke(, func( context.Context,  gax.CallSettings) error {
		var  error
		,  = .clusterManagerClient.ListOperations(, , .GRPC...)
		return 
	}, ...)
	if  != nil {
		return nil, 
	}
	return , nil
}
GetOperation gets the specified operation.
func ( *ClusterManagerClient) ( context.Context,  *containerpb.GetOperationRequest,  ...gax.CallOption) (*containerpb.Operation, error) {
	if ,  := .Deadline(); ! && !.disableDeadlines {
		,  := context.WithTimeout(, 20000*time.Millisecond)
		defer ()
		 = 
	}
	 := metadata.Pairs("x-goog-request-params", fmt.Sprintf("%s=%v&%s=%v&%s=%v&%s=%v", "name", url.QueryEscape(.GetName()), "project_id", url.QueryEscape(.GetProjectId()), "zone", url.QueryEscape(.GetZone()), "operation_id", url.QueryEscape(.GetOperationId())))
	 = insertMetadata(, .xGoogMetadata, )
	 = append(.CallOptions.GetOperation[0:len(.CallOptions.GetOperation):len(.CallOptions.GetOperation)], ...)
	var  *containerpb.Operation
	 := gax.Invoke(, func( context.Context,  gax.CallSettings) error {
		var  error
		,  = .clusterManagerClient.GetOperation(, , .GRPC...)
		return 
	}, ...)
	if  != nil {
		return nil, 
	}
	return , nil
}
CancelOperation cancels the specified operation.
func ( *ClusterManagerClient) ( context.Context,  *containerpb.CancelOperationRequest,  ...gax.CallOption) error {
	if ,  := .Deadline(); ! && !.disableDeadlines {
		,  := context.WithTimeout(, 45000*time.Millisecond)
		defer ()
		 = 
	}
	 := metadata.Pairs("x-goog-request-params", fmt.Sprintf("%s=%v&%s=%v&%s=%v&%s=%v", "name", url.QueryEscape(.GetName()), "project_id", url.QueryEscape(.GetProjectId()), "zone", url.QueryEscape(.GetZone()), "operation_id", url.QueryEscape(.GetOperationId())))
	 = insertMetadata(, .xGoogMetadata, )
	 = append(.CallOptions.CancelOperation[0:len(.CallOptions.CancelOperation):len(.CallOptions.CancelOperation)], ...)
	 := gax.Invoke(, func( context.Context,  gax.CallSettings) error {
		var  error
		_,  = .clusterManagerClient.CancelOperation(, , .GRPC...)
		return 
	}, ...)
	return 
}
GetServerConfig returns configuration info about the Google Kubernetes Engine service.
func ( *ClusterManagerClient) ( context.Context,  *containerpb.GetServerConfigRequest,  ...gax.CallOption) (*containerpb.ServerConfig, error) {
	if ,  := .Deadline(); ! && !.disableDeadlines {
		,  := context.WithTimeout(, 20000*time.Millisecond)
		defer ()
		 = 
	}
	 := metadata.Pairs("x-goog-request-params", fmt.Sprintf("%s=%v&%s=%v&%s=%v", "name", url.QueryEscape(.GetName()), "project_id", url.QueryEscape(.GetProjectId()), "zone", url.QueryEscape(.GetZone())))
	 = insertMetadata(, .xGoogMetadata, )
	 = append(.CallOptions.GetServerConfig[0:len(.CallOptions.GetServerConfig):len(.CallOptions.GetServerConfig)], ...)
	var  *containerpb.ServerConfig
	 := gax.Invoke(, func( context.Context,  gax.CallSettings) error {
		var  error
		,  = .clusterManagerClient.GetServerConfig(, , .GRPC...)
		return 
	}, ...)
	if  != nil {
		return nil, 
	}
	return , nil
}
ListNodePools lists the node pools for a cluster.
func ( *ClusterManagerClient) ( context.Context,  *containerpb.ListNodePoolsRequest,  ...gax.CallOption) (*containerpb.ListNodePoolsResponse, error) {
	if ,  := .Deadline(); ! && !.disableDeadlines {
		,  := context.WithTimeout(, 20000*time.Millisecond)
		defer ()
		 = 
	}
	 := metadata.Pairs("x-goog-request-params", fmt.Sprintf("%s=%v&%s=%v&%s=%v&%s=%v", "parent", url.QueryEscape(.GetParent()), "project_id", url.QueryEscape(.GetProjectId()), "zone", url.QueryEscape(.GetZone()), "cluster_id", url.QueryEscape(.GetClusterId())))
	 = insertMetadata(, .xGoogMetadata, )
	 = append(.CallOptions.ListNodePools[0:len(.CallOptions.ListNodePools):len(.CallOptions.ListNodePools)], ...)
	var  *containerpb.ListNodePoolsResponse
	 := gax.Invoke(, func( context.Context,  gax.CallSettings) error {
		var  error
		,  = .clusterManagerClient.ListNodePools(, , .GRPC...)
		return 
	}, ...)
	if  != nil {
		return nil, 
	}
	return , nil
}
GetNodePool retrieves the requested node pool.
func ( *ClusterManagerClient) ( context.Context,  *containerpb.GetNodePoolRequest,  ...gax.CallOption) (*containerpb.NodePool, error) {
	if ,  := .Deadline(); ! && !.disableDeadlines {
		,  := context.WithTimeout(, 20000*time.Millisecond)
		defer ()
		 = 
	}
	 := metadata.Pairs("x-goog-request-params", fmt.Sprintf("%s=%v&%s=%v&%s=%v&%s=%v&%s=%v", "name", url.QueryEscape(.GetName()), "project_id", url.QueryEscape(.GetProjectId()), "zone", url.QueryEscape(.GetZone()), "cluster_id", url.QueryEscape(.GetClusterId()), "node_pool_id", url.QueryEscape(.GetNodePoolId())))
	 = insertMetadata(, .xGoogMetadata, )
	 = append(.CallOptions.GetNodePool[0:len(.CallOptions.GetNodePool):len(.CallOptions.GetNodePool)], ...)
	var  *containerpb.NodePool
	 := gax.Invoke(, func( context.Context,  gax.CallSettings) error {
		var  error
		,  = .clusterManagerClient.GetNodePool(, , .GRPC...)
		return 
	}, ...)
	if  != nil {
		return nil, 
	}
	return , nil
}
CreateNodePool creates a node pool for a cluster.
func ( *ClusterManagerClient) ( context.Context,  *containerpb.CreateNodePoolRequest,  ...gax.CallOption) (*containerpb.Operation, error) {
	if ,  := .Deadline(); ! && !.disableDeadlines {
		,  := context.WithTimeout(, 45000*time.Millisecond)
		defer ()
		 = 
	}
	 := metadata.Pairs("x-goog-request-params", fmt.Sprintf("%s=%v&%s=%v&%s=%v&%s=%v", "parent", url.QueryEscape(.GetParent()), "project_id", url.QueryEscape(.GetProjectId()), "zone", url.QueryEscape(.GetZone()), "cluster_id", url.QueryEscape(.GetClusterId())))
	 = insertMetadata(, .xGoogMetadata, )
	 = append(.CallOptions.CreateNodePool[0:len(.CallOptions.CreateNodePool):len(.CallOptions.CreateNodePool)], ...)
	var  *containerpb.Operation
	 := gax.Invoke(, func( context.Context,  gax.CallSettings) error {
		var  error
		,  = .clusterManagerClient.CreateNodePool(, , .GRPC...)
		return 
	}, ...)
	if  != nil {
		return nil, 
	}
	return , nil
}
DeleteNodePool deletes a node pool from a cluster.
func ( *ClusterManagerClient) ( context.Context,  *containerpb.DeleteNodePoolRequest,  ...gax.CallOption) (*containerpb.Operation, error) {
	if ,  := .Deadline(); ! && !.disableDeadlines {
		,  := context.WithTimeout(, 20000*time.Millisecond)
		defer ()
		 = 
	}
	 := metadata.Pairs("x-goog-request-params", fmt.Sprintf("%s=%v&%s=%v&%s=%v&%s=%v&%s=%v", "name", url.QueryEscape(.GetName()), "project_id", url.QueryEscape(.GetProjectId()), "zone", url.QueryEscape(.GetZone()), "cluster_id", url.QueryEscape(.GetClusterId()), "node_pool_id", url.QueryEscape(.GetNodePoolId())))
	 = insertMetadata(, .xGoogMetadata, )
	 = append(.CallOptions.DeleteNodePool[0:len(.CallOptions.DeleteNodePool):len(.CallOptions.DeleteNodePool)], ...)
	var  *containerpb.Operation
	 := gax.Invoke(, func( context.Context,  gax.CallSettings) error {
		var  error
		,  = .clusterManagerClient.DeleteNodePool(, , .GRPC...)
		return 
	}, ...)
	if  != nil {
		return nil, 
	}
	return , nil
}
RollbackNodePoolUpgrade rolls back a previously Aborted or Failed NodePool upgrade. This makes no changes if the last upgrade successfully completed.
func ( *ClusterManagerClient) ( context.Context,  *containerpb.RollbackNodePoolUpgradeRequest,  ...gax.CallOption) (*containerpb.Operation, error) {
	if ,  := .Deadline(); ! && !.disableDeadlines {
		,  := context.WithTimeout(, 45000*time.Millisecond)
		defer ()
		 = 
	}
	 := metadata.Pairs("x-goog-request-params", fmt.Sprintf("%s=%v&%s=%v&%s=%v&%s=%v&%s=%v", "name", url.QueryEscape(.GetName()), "project_id", url.QueryEscape(.GetProjectId()), "zone", url.QueryEscape(.GetZone()), "cluster_id", url.QueryEscape(.GetClusterId()), "node_pool_id", url.QueryEscape(.GetNodePoolId())))
	 = insertMetadata(, .xGoogMetadata, )
	 = append(.CallOptions.RollbackNodePoolUpgrade[0:len(.CallOptions.RollbackNodePoolUpgrade):len(.CallOptions.RollbackNodePoolUpgrade)], ...)
	var  *containerpb.Operation
	 := gax.Invoke(, func( context.Context,  gax.CallSettings) error {
		var  error
		,  = .clusterManagerClient.RollbackNodePoolUpgrade(, , .GRPC...)
		return 
	}, ...)
	if  != nil {
		return nil, 
	}
	return , nil
}
SetNodePoolManagement sets the NodeManagement options for a node pool.
func ( *ClusterManagerClient) ( context.Context,  *containerpb.SetNodePoolManagementRequest,  ...gax.CallOption) (*containerpb.Operation, error) {
	if ,  := .Deadline(); ! && !.disableDeadlines {
		,  := context.WithTimeout(, 45000*time.Millisecond)
		defer ()
		 = 
	}
	 := metadata.Pairs("x-goog-request-params", fmt.Sprintf("%s=%v&%s=%v&%s=%v&%s=%v&%s=%v", "name", url.QueryEscape(.GetName()), "project_id", url.QueryEscape(.GetProjectId()), "zone", url.QueryEscape(.GetZone()), "cluster_id", url.QueryEscape(.GetClusterId()), "node_pool_id", url.QueryEscape(.GetNodePoolId())))
	 = insertMetadata(, .xGoogMetadata, )
	 = append(.CallOptions.SetNodePoolManagement[0:len(.CallOptions.SetNodePoolManagement):len(.CallOptions.SetNodePoolManagement)], ...)
	var  *containerpb.Operation
	 := gax.Invoke(, func( context.Context,  gax.CallSettings) error {
		var  error
		,  = .clusterManagerClient.SetNodePoolManagement(, , .GRPC...)
		return 
	}, ...)
	if  != nil {
		return nil, 
	}
	return , nil
}
SetLabels sets labels on a cluster.
func ( *ClusterManagerClient) ( context.Context,  *containerpb.SetLabelsRequest,  ...gax.CallOption) (*containerpb.Operation, error) {
	if ,  := .Deadline(); ! && !.disableDeadlines {
		,  := context.WithTimeout(, 45000*time.Millisecond)
		defer ()
		 = 
	}
	 := metadata.Pairs("x-goog-request-params", fmt.Sprintf("%s=%v&%s=%v&%s=%v&%s=%v", "name", url.QueryEscape(.GetName()), "project_id", url.QueryEscape(.GetProjectId()), "zone", url.QueryEscape(.GetZone()), "cluster_id", url.QueryEscape(.GetClusterId())))
	 = insertMetadata(, .xGoogMetadata, )
	 = append(.CallOptions.SetLabels[0:len(.CallOptions.SetLabels):len(.CallOptions.SetLabels)], ...)
	var  *containerpb.Operation
	 := gax.Invoke(, func( context.Context,  gax.CallSettings) error {
		var  error
		,  = .clusterManagerClient.SetLabels(, , .GRPC...)
		return 
	}, ...)
	if  != nil {
		return nil, 
	}
	return , nil
}
SetLegacyAbac enables or disables the ABAC authorization mechanism on a cluster.
func ( *ClusterManagerClient) ( context.Context,  *containerpb.SetLegacyAbacRequest,  ...gax.CallOption) (*containerpb.Operation, error) {
	if ,  := .Deadline(); ! && !.disableDeadlines {
		,  := context.WithTimeout(, 45000*time.Millisecond)
		defer ()
		 = 
	}
	 := metadata.Pairs("x-goog-request-params", fmt.Sprintf("%s=%v&%s=%v&%s=%v&%s=%v", "name", url.QueryEscape(.GetName()), "project_id", url.QueryEscape(.GetProjectId()), "zone", url.QueryEscape(.GetZone()), "cluster_id", url.QueryEscape(.GetClusterId())))
	 = insertMetadata(, .xGoogMetadata, )
	 = append(.CallOptions.SetLegacyAbac[0:len(.CallOptions.SetLegacyAbac):len(.CallOptions.SetLegacyAbac)], ...)
	var  *containerpb.Operation
	 := gax.Invoke(, func( context.Context,  gax.CallSettings) error {
		var  error
		,  = .clusterManagerClient.SetLegacyAbac(, , .GRPC...)
		return 
	}, ...)
	if  != nil {
		return nil, 
	}
	return , nil
}
StartIPRotation starts master IP rotation.
func ( *ClusterManagerClient) ( context.Context,  *containerpb.StartIPRotationRequest,  ...gax.CallOption) (*containerpb.Operation, error) {
	if ,  := .Deadline(); ! && !.disableDeadlines {
		,  := context.WithTimeout(, 45000*time.Millisecond)
		defer ()
		 = 
	}
	 := metadata.Pairs("x-goog-request-params", fmt.Sprintf("%s=%v&%s=%v&%s=%v&%s=%v", "name", url.QueryEscape(.GetName()), "project_id", url.QueryEscape(.GetProjectId()), "zone", url.QueryEscape(.GetZone()), "cluster_id", url.QueryEscape(.GetClusterId())))
	 = insertMetadata(, .xGoogMetadata, )
	 = append(.CallOptions.StartIPRotation[0:len(.CallOptions.StartIPRotation):len(.CallOptions.StartIPRotation)], ...)
	var  *containerpb.Operation
	 := gax.Invoke(, func( context.Context,  gax.CallSettings) error {
		var  error
		,  = .clusterManagerClient.StartIPRotation(, , .GRPC...)
		return 
	}, ...)
	if  != nil {
		return nil, 
	}
	return , nil
}
CompleteIPRotation completes master IP rotation.
func ( *ClusterManagerClient) ( context.Context,  *containerpb.CompleteIPRotationRequest,  ...gax.CallOption) (*containerpb.Operation, error) {
	if ,  := .Deadline(); ! && !.disableDeadlines {
		,  := context.WithTimeout(, 45000*time.Millisecond)
		defer ()
		 = 
	}
	 := metadata.Pairs("x-goog-request-params", fmt.Sprintf("%s=%v&%s=%v&%s=%v&%s=%v", "name", url.QueryEscape(.GetName()), "project_id", url.QueryEscape(.GetProjectId()), "zone", url.QueryEscape(.GetZone()), "cluster_id", url.QueryEscape(.GetClusterId())))
	 = insertMetadata(, .xGoogMetadata, )
	 = append(.CallOptions.CompleteIPRotation[0:len(.CallOptions.CompleteIPRotation):len(.CallOptions.CompleteIPRotation)], ...)
	var  *containerpb.Operation
	 := gax.Invoke(, func( context.Context,  gax.CallSettings) error {
		var  error
		,  = .clusterManagerClient.CompleteIPRotation(, , .GRPC...)
		return 
	}, ...)
	if  != nil {
		return nil, 
	}
	return , nil
}
SetNodePoolSize sets the size for a specific node pool.
func ( *ClusterManagerClient) ( context.Context,  *containerpb.SetNodePoolSizeRequest,  ...gax.CallOption) (*containerpb.Operation, error) {
	if ,  := .Deadline(); ! && !.disableDeadlines {
		,  := context.WithTimeout(, 45000*time.Millisecond)
		defer ()
		 = 
	}
	 := metadata.Pairs("x-goog-request-params", fmt.Sprintf("%s=%v&%s=%v&%s=%v&%s=%v&%s=%v", "name", url.QueryEscape(.GetName()), "project_id", url.QueryEscape(.GetProjectId()), "zone", url.QueryEscape(.GetZone()), "cluster_id", url.QueryEscape(.GetClusterId()), "node_pool_id", url.QueryEscape(.GetNodePoolId())))
	 = insertMetadata(, .xGoogMetadata, )
	 = append(.CallOptions.SetNodePoolSize[0:len(.CallOptions.SetNodePoolSize):len(.CallOptions.SetNodePoolSize)], ...)
	var  *containerpb.Operation
	 := gax.Invoke(, func( context.Context,  gax.CallSettings) error {
		var  error
		,  = .clusterManagerClient.SetNodePoolSize(, , .GRPC...)
		return 
	}, ...)
	if  != nil {
		return nil, 
	}
	return , nil
}
SetNetworkPolicy enables or disables Network Policy for a cluster.
func ( *ClusterManagerClient) ( context.Context,  *containerpb.SetNetworkPolicyRequest,  ...gax.CallOption) (*containerpb.Operation, error) {
	if ,  := .Deadline(); ! && !.disableDeadlines {
		,  := context.WithTimeout(, 45000*time.Millisecond)
		defer ()
		 = 
	}
	 := metadata.Pairs("x-goog-request-params", fmt.Sprintf("%s=%v&%s=%v&%s=%v&%s=%v", "name", url.QueryEscape(.GetName()), "project_id", url.QueryEscape(.GetProjectId()), "zone", url.QueryEscape(.GetZone()), "cluster_id", url.QueryEscape(.GetClusterId())))
	 = insertMetadata(, .xGoogMetadata, )
	 = append(.CallOptions.SetNetworkPolicy[0:len(.CallOptions.SetNetworkPolicy):len(.CallOptions.SetNetworkPolicy)], ...)
	var  *containerpb.Operation
	 := gax.Invoke(, func( context.Context,  gax.CallSettings) error {
		var  error
		,  = .clusterManagerClient.SetNetworkPolicy(, , .GRPC...)
		return 
	}, ...)
	if  != nil {
		return nil, 
	}
	return , nil
}
SetMaintenancePolicy sets the maintenance policy for a cluster.
func ( *ClusterManagerClient) ( context.Context,  *containerpb.SetMaintenancePolicyRequest,  ...gax.CallOption) (*containerpb.Operation, error) {
	if ,  := .Deadline(); ! && !.disableDeadlines {
		,  := context.WithTimeout(, 45000*time.Millisecond)
		defer ()
		 = 
	}
	 := metadata.Pairs("x-goog-request-params", fmt.Sprintf("%s=%v&%s=%v&%s=%v&%s=%v", "name", url.QueryEscape(.GetName()), "project_id", url.QueryEscape(.GetProjectId()), "zone", url.QueryEscape(.GetZone()), "cluster_id", url.QueryEscape(.GetClusterId())))
	 = insertMetadata(, .xGoogMetadata, )
	 = append(.CallOptions.SetMaintenancePolicy[0:len(.CallOptions.SetMaintenancePolicy):len(.CallOptions.SetMaintenancePolicy)], ...)
	var  *containerpb.Operation
	 := gax.Invoke(, func( context.Context,  gax.CallSettings) error {
		var  error
		,  = .clusterManagerClient.SetMaintenancePolicy(, , .GRPC...)
		return 
	}, ...)
	if  != nil {
		return nil, 
	}
	return , nil
}
ListUsableSubnetworks lists subnetworks that are usable for creating clusters in a project.
func ( *ClusterManagerClient) ( context.Context,  *containerpb.ListUsableSubnetworksRequest,  ...gax.CallOption) *UsableSubnetworkIterator {
	 := metadata.Pairs("x-goog-request-params", fmt.Sprintf("%s=%v", "parent", url.QueryEscape(.GetParent())))
	 = insertMetadata(, .xGoogMetadata, )
	 = append(.CallOptions.ListUsableSubnetworks[0:len(.CallOptions.ListUsableSubnetworks):len(.CallOptions.ListUsableSubnetworks)], ...)
	 := &UsableSubnetworkIterator{}
	 = proto.Clone().(*containerpb.ListUsableSubnetworksRequest)
	.InternalFetch = func( int,  string) ([]*containerpb.UsableSubnetwork, string, error) {
		var  *containerpb.ListUsableSubnetworksResponse
		.PageToken = 
		if  > math.MaxInt32 {
			.PageSize = math.MaxInt32
		} else {
			.PageSize = int32()
		}
		 := gax.Invoke(, func( context.Context,  gax.CallSettings) error {
			var  error
			,  = .clusterManagerClient.ListUsableSubnetworks(, , .GRPC...)
			return 
		}, ...)
		if  != nil {
			return nil, "", 
		}

		.Response = 
		return .GetSubnetworks(), .GetNextPageToken(), nil
	}
	 := func( int,  string) (string, error) {
		, ,  := .InternalFetch(, )
		if  != nil {
			return "", 
		}
		.items = append(.items, ...)
		return , nil
	}
	.pageInfo, .nextFunc = iterator.NewPageInfo(, .bufLen, .takeBuf)
	.pageInfo.MaxSize = int(.GetPageSize())
	.pageInfo.Token = .GetPageToken()
	return 
}
UsableSubnetworkIterator manages a stream of *containerpb.UsableSubnetwork.
Response is the raw response for the current page. It must be cast to the RPC response type. Calling Next() or InternalFetch() updates this value.
	Response interface{}
InternalFetch is for use by the Google Cloud Libraries only. It is not part of the stable interface of this package. InternalFetch returns results from a single call to the underlying RPC. The number of results is no greater than pageSize. If there are no more results, nextPageToken is empty and err is nil.
	InternalFetch func(pageSize int, pageToken string) (results []*containerpb.UsableSubnetwork, nextPageToken string, err error)
}
PageInfo supports pagination. See the google.golang.org/api/iterator package for details.
Next returns the next result. Its second return value is iterator.Done if there are no more results. Once Next returns Done, all subsequent calls will return Done.
func ( *UsableSubnetworkIterator) () (*containerpb.UsableSubnetwork, error) {
	var  *containerpb.UsableSubnetwork
	if  := .nextFunc();  != nil {
		return , 
	}
	 = .items[0]
	.items = .items[1:]
	return , nil
}

func ( *UsableSubnetworkIterator) () int {
	return len(.items)
}

func ( *UsableSubnetworkIterator) () interface{} {
	 := .items
	.items = nil
	return