From 538af3250e4106b93b32796705825fce14a6015c Mon Sep 17 00:00:00 2001 From: "gcf-owl-bot[bot]" <78513119+gcf-owl-bot[bot]@users.noreply.github.com> Date: Sat, 16 Jul 2022 12:14:11 +0000 Subject: [PATCH] fix(deps): require google-api-core>=1.32.0,>=2.8.0 (#264) - [ ] Regenerate this pull request now. PiperOrigin-RevId: 459095142 Source-Link: https://github.com/googleapis/googleapis/commit/4f1be992601ed740a581a32cedc4e7b6c6a27793 Source-Link: https://github.com/googleapis/googleapis-gen/commit/ae686d9cde4fc3e36d0ac02efb8643b15890c1ed Copy-Tag: eyJwIjoiLmdpdGh1Yi8uT3dsQm90LnlhbWwiLCJoIjoiYWU2ODZkOWNkZTRmYzNlMzZkMGFjMDJlZmI4NjQzYjE1ODkwYzFlZCJ9 feat: add support to modify kubelet pod pid limit in node system configuration feat: support spot VM feat: support Tier 1 bandwidth feat: update support for node pool labels, taints and network tags feat: add Binauthz Evaluation mode support to GKE Classic feat: add GKE Identity Service feat: add network tags to autopilot cluster feat: support enabling Confidential Nodes in the node pool feat: support node pool blue-green upgrade feat: add Location Policy API feat: support GPU timesharing feat: add managed prometheus feature PiperOrigin-RevId: 458323987 Source-Link: https://github.com/googleapis/googleapis/commit/c51f2edf55cbc39e91160ac34fb6faf8d2b36f16 Source-Link: https://github.com/googleapis/googleapis-gen/commit/45233cbe6c51f2cf566e5d5f5e63129c7f89f3ed Copy-Tag: eyJwIjoiLmdpdGh1Yi8uT3dsQm90LnlhbWwiLCJoIjoiNDUyMzNjYmU2YzUxZjJjZjU2NmU1ZDVmNWU2MzEyOWM3Zjg5ZjNlZCJ9 feat: add cgroup mode to node system config feat: add support to modify kubelet pod pid limit in node system configuration feat: support Tier 1 bandwidth feat: support IPV6 Dual Stack (stack_type) feat: add Binauthz Evaluation mode support to GKE Classic feat: support GKE Cost Allocations feat: add network tags to autopilot cluster feat: add protect config audit api feat: support enabling Confidential Nodes in the node pool feat: support node pool blue-green upgrade feat: add Location Policy API feat: support GPU timesharing PiperOrigin-RevId: 458322449 Source-Link: https://github.com/googleapis/googleapis/commit/61ea2e50a68726d276ff63b4e1456c3df7c8c734 Source-Link: https://github.com/googleapis/googleapis-gen/commit/30e187a0b006d39692eee40bfe84fb7c71b95a7b Copy-Tag: eyJwIjoiLmdpdGh1Yi8uT3dsQm90LnlhbWwiLCJoIjoiMzBlMTg3YTBiMDA2ZDM5NjkyZWVlNDBiZmU4NGZiN2M3MWI5NWE3YiJ9 feat: add audience parameter PiperOrigin-RevId: 456827138 Source-Link: https://github.com/googleapis/googleapis/commit/23f1a157189581734c7a77cddfeb7c5bc1e440ae Source-Link: https://github.com/googleapis/googleapis-gen/commit/4075a8514f676691ec156688a5bbf183aa9893ce Copy-Tag: eyJwIjoiLmdpdGh1Yi8uT3dsQm90LnlhbWwiLCJoIjoiNDA3NWE4NTE0ZjY3NjY5MWVjMTU2Njg4YTViYmYxODNhYTk4OTNjZSJ9 --- .../.github/sync-repo-settings.yaml | 27 + .../container-v1-py.tar.gz | Bin 0 -> 49152 bytes .../google/cloud/container/__init__.py | 20 + .../google/cloud/container_v1/__init__.py | 20 + .../cloud/container_v1/gapic_metadata.json | 10 + .../services/cluster_manager/async_client.py | 137 ++- .../services/cluster_manager/client.py | 141 ++- .../cluster_manager/transports/base.py | 30 +- .../cluster_manager/transports/grpc.py | 29 + .../transports/grpc_asyncio.py | 31 + .../cloud/container_v1/types/__init__.py | 20 + .../container_v1/types/cluster_service.py | 764 +++++++++++++++-- .../cloud/container_v1beta1/__init__.py | 18 + .../container_v1beta1/gapic_metadata.json | 10 + .../services/cluster_manager/async_client.py | 113 ++- .../services/cluster_manager/client.py | 117 ++- .../cluster_manager/transports/base.py | 30 +- .../cluster_manager/transports/grpc.py | 29 + .../transports/grpc_asyncio.py | 31 + .../cloud/container_v1beta1/types/__init__.py | 18 + .../types/cluster_service.py | 804 ++++++++++++++++-- ...anager_complete_node_pool_upgrade_async.py | 42 + ...manager_complete_node_pool_upgrade_sync.py | 42 + ...anager_complete_node_pool_upgrade_async.py | 42 + ...manager_complete_node_pool_upgrade_sync.py | 42 + .../snippet_metadata_container_v1.json | 147 ++++ .../snippet_metadata_container_v1beta1.json | 147 ++++ .../scripts/fixup_container_v1_keywords.py | 5 +- .../fixup_container_v1beta1_keywords.py | 5 +- packages/google-cloud-container/setup.py | 5 +- .../testing/constraints-3.6.txt | 12 - .../testing/constraints-3.7.txt | 2 +- .../container_v1/test_cluster_manager.py | 205 +++++ .../container_v1beta1/test_cluster_manager.py | 205 +++++ 34 files changed, 2994 insertions(+), 306 deletions(-) create mode 100644 packages/google-cloud-container/.github/sync-repo-settings.yaml create mode 100644 packages/google-cloud-container/container-v1-py.tar.gz create mode 100644 packages/google-cloud-container/samples/generated_samples/container_v1_generated_cluster_manager_complete_node_pool_upgrade_async.py create mode 100644 packages/google-cloud-container/samples/generated_samples/container_v1_generated_cluster_manager_complete_node_pool_upgrade_sync.py create mode 100644 packages/google-cloud-container/samples/generated_samples/container_v1beta1_generated_cluster_manager_complete_node_pool_upgrade_async.py create mode 100644 packages/google-cloud-container/samples/generated_samples/container_v1beta1_generated_cluster_manager_complete_node_pool_upgrade_sync.py delete mode 100644 packages/google-cloud-container/testing/constraints-3.6.txt diff --git a/packages/google-cloud-container/.github/sync-repo-settings.yaml b/packages/google-cloud-container/.github/sync-repo-settings.yaml new file mode 100644 index 000000000000..da344f850c48 --- /dev/null +++ b/packages/google-cloud-container/.github/sync-repo-settings.yaml @@ -0,0 +1,27 @@ + + +# https://github.com/googleapis/repo-automation-bots/tree/main/packages/sync-repo-settings +# Rules for main branch protection +branchProtectionRules: +# Identifies the protection rule pattern. Name of the branch to be protected. +# Defaults to `main` +- pattern: main + requiresCodeOwnerReviews: true + requiresStrictStatusChecks: true + requiredStatusCheckContexts: + - 'Kokoro' + - 'cla/google' + - 'Samples - Lint' + - 'Samples - Python 3.7' + - 'Samples - Python 3.8' + - 'Samples - Python 3.9' + - 'Samples - Python 3.10' + - 'OwlBot Post Processor' + - 'docs' + - 'docfx' + - 'lint' + - 'unit (3.7)' + - 'unit (3.8)' + - 'unit (3.9)' + - 'unit (3.10)' + - 'cover' \ No newline at end of file diff --git a/packages/google-cloud-container/container-v1-py.tar.gz b/packages/google-cloud-container/container-v1-py.tar.gz new file mode 100644 index 0000000000000000000000000000000000000000..e952e390fa0cb01851cd3bc8a2ac787ddd4dc290 GIT binary patch literal 49152 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 QV{;mYLDTi_9YFB^0Kq#axc~qF literal 0 HcmV?d00001 diff --git a/packages/google-cloud-container/google/cloud/container/__init__.py b/packages/google-cloud-container/google/cloud/container/__init__.py index 59467da88f38..70e7339136a8 100644 --- a/packages/google-cloud-container/google/cloud/container/__init__.py +++ b/packages/google-cloud-container/google/cloud/container/__init__.py @@ -29,6 +29,7 @@ AutoprovisioningNodePoolDefaults, AutoUpgradeOptions, BinaryAuthorization, + BlueGreenSettings, CancelOperationRequest, ClientCertificateConfig, CloudRunConfig, @@ -36,6 +37,7 @@ ClusterAutoscaling, ClusterUpdate, CompleteIPRotationRequest, + CompleteNodePoolUpgradeRequest, ConfidentialNodes, ConfigConnectorConfig, CreateClusterRequest, @@ -59,8 +61,10 @@ GetOpenIDConfigResponse, GetOperationRequest, GetServerConfigRequest, + GPUSharingConfig, HorizontalPodAutoscaling, HttpLoadBalancing, + IdentityServiceConfig, ILBSubsettingConfig, IntraNodeVisibilityConfig, IPAllocationPolicy, @@ -81,6 +85,7 @@ MaintenanceExclusionOptions, MaintenancePolicy, MaintenanceWindow, + ManagedPrometheusConfig, MasterAuth, MasterAuthorizedNetworksConfig, MaxPodsConstraint, @@ -90,15 +95,20 @@ NetworkConfig, NetworkPolicy, NetworkPolicyConfig, + NetworkTags, NodeConfig, NodeConfigDefaults, NodeKubeletConfig, + NodeLabels, NodeManagement, NodeNetworkConfig, NodePool, + NodePoolAutoConfig, NodePoolAutoscaling, NodePoolDefaults, + NodePoolUpdateStrategy, NodeTaint, + NodeTaints, NotificationConfig, Operation, OperationProgress, @@ -157,6 +167,7 @@ "AutoprovisioningNodePoolDefaults", "AutoUpgradeOptions", "BinaryAuthorization", + "BlueGreenSettings", "CancelOperationRequest", "ClientCertificateConfig", "CloudRunConfig", @@ -164,6 +175,7 @@ "ClusterAutoscaling", "ClusterUpdate", "CompleteIPRotationRequest", + "CompleteNodePoolUpgradeRequest", "ConfidentialNodes", "ConfigConnectorConfig", "CreateClusterRequest", @@ -186,8 +198,10 @@ "GetOpenIDConfigResponse", "GetOperationRequest", "GetServerConfigRequest", + "GPUSharingConfig", "HorizontalPodAutoscaling", "HttpLoadBalancing", + "IdentityServiceConfig", "ILBSubsettingConfig", "IntraNodeVisibilityConfig", "IPAllocationPolicy", @@ -208,6 +222,7 @@ "MaintenanceExclusionOptions", "MaintenancePolicy", "MaintenanceWindow", + "ManagedPrometheusConfig", "MasterAuth", "MasterAuthorizedNetworksConfig", "MaxPodsConstraint", @@ -217,15 +232,19 @@ "NetworkConfig", "NetworkPolicy", "NetworkPolicyConfig", + "NetworkTags", "NodeConfig", "NodeConfigDefaults", "NodeKubeletConfig", + "NodeLabels", "NodeManagement", "NodeNetworkConfig", "NodePool", + "NodePoolAutoConfig", "NodePoolAutoscaling", "NodePoolDefaults", "NodeTaint", + "NodeTaints", "NotificationConfig", "Operation", "OperationProgress", @@ -270,6 +289,7 @@ "WorkloadIdentityConfig", "WorkloadMetadataConfig", "DatapathProvider", + "NodePoolUpdateStrategy", "PrivateIPv6GoogleAccess", "UpgradeResourceType", ) diff --git a/packages/google-cloud-container/google/cloud/container_v1/__init__.py b/packages/google-cloud-container/google/cloud/container_v1/__init__.py index 3d33a5e46072..002d8cce1500 100644 --- a/packages/google-cloud-container/google/cloud/container_v1/__init__.py +++ b/packages/google-cloud-container/google/cloud/container_v1/__init__.py @@ -24,6 +24,7 @@ AutoprovisioningNodePoolDefaults, AutoUpgradeOptions, BinaryAuthorization, + BlueGreenSettings, CancelOperationRequest, ClientCertificateConfig, CloudRunConfig, @@ -31,6 +32,7 @@ ClusterAutoscaling, ClusterUpdate, CompleteIPRotationRequest, + CompleteNodePoolUpgradeRequest, ConfidentialNodes, ConfigConnectorConfig, CreateClusterRequest, @@ -54,8 +56,10 @@ GetOpenIDConfigResponse, GetOperationRequest, GetServerConfigRequest, + GPUSharingConfig, HorizontalPodAutoscaling, HttpLoadBalancing, + IdentityServiceConfig, ILBSubsettingConfig, IntraNodeVisibilityConfig, IPAllocationPolicy, @@ -76,6 +80,7 @@ MaintenanceExclusionOptions, MaintenancePolicy, MaintenanceWindow, + ManagedPrometheusConfig, MasterAuth, MasterAuthorizedNetworksConfig, MaxPodsConstraint, @@ -85,15 +90,20 @@ NetworkConfig, NetworkPolicy, NetworkPolicyConfig, + NetworkTags, NodeConfig, NodeConfigDefaults, NodeKubeletConfig, + NodeLabels, NodeManagement, NodeNetworkConfig, NodePool, + NodePoolAutoConfig, NodePoolAutoscaling, NodePoolDefaults, + NodePoolUpdateStrategy, NodeTaint, + NodeTaints, NotificationConfig, Operation, OperationProgress, @@ -151,6 +161,7 @@ "Autopilot", "AutoprovisioningNodePoolDefaults", "BinaryAuthorization", + "BlueGreenSettings", "CancelOperationRequest", "ClientCertificateConfig", "CloudRunConfig", @@ -159,6 +170,7 @@ "ClusterManagerClient", "ClusterUpdate", "CompleteIPRotationRequest", + "CompleteNodePoolUpgradeRequest", "ConfidentialNodes", "ConfigConnectorConfig", "CreateClusterRequest", @@ -171,6 +183,7 @@ "DeleteClusterRequest", "DeleteNodePoolRequest", "DnsCacheConfig", + "GPUSharingConfig", "GcePersistentDiskCsiDriverConfig", "GcfsConfig", "GcpFilestoreCsiDriverConfig", @@ -186,6 +199,7 @@ "HttpLoadBalancing", "ILBSubsettingConfig", "IPAllocationPolicy", + "IdentityServiceConfig", "IntraNodeVisibilityConfig", "Jwk", "KubernetesDashboard", @@ -204,6 +218,7 @@ "MaintenanceExclusionOptions", "MaintenancePolicy", "MaintenanceWindow", + "ManagedPrometheusConfig", "MasterAuth", "MasterAuthorizedNetworksConfig", "MaxPodsConstraint", @@ -213,15 +228,20 @@ "NetworkConfig", "NetworkPolicy", "NetworkPolicyConfig", + "NetworkTags", "NodeConfig", "NodeConfigDefaults", "NodeKubeletConfig", + "NodeLabels", "NodeManagement", "NodeNetworkConfig", "NodePool", + "NodePoolAutoConfig", "NodePoolAutoscaling", "NodePoolDefaults", + "NodePoolUpdateStrategy", "NodeTaint", + "NodeTaints", "NotificationConfig", "Operation", "OperationProgress", diff --git a/packages/google-cloud-container/google/cloud/container_v1/gapic_metadata.json b/packages/google-cloud-container/google/cloud/container_v1/gapic_metadata.json index 4d2e42e0311a..5ef3b3ddb5c8 100644 --- a/packages/google-cloud-container/google/cloud/container_v1/gapic_metadata.json +++ b/packages/google-cloud-container/google/cloud/container_v1/gapic_metadata.json @@ -20,6 +20,11 @@ "complete_ip_rotation" ] }, + "CompleteNodePoolUpgrade": { + "methods": [ + "complete_node_pool_upgrade" + ] + }, "CreateCluster": { "methods": [ "create_cluster" @@ -185,6 +190,11 @@ "complete_ip_rotation" ] }, + "CompleteNodePoolUpgrade": { + "methods": [ + "complete_node_pool_upgrade" + ] + }, "CreateCluster": { "methods": [ "create_cluster" diff --git a/packages/google-cloud-container/google/cloud/container_v1/services/cluster_manager/async_client.py b/packages/google-cloud-container/google/cloud/container_v1/services/cluster_manager/async_client.py index ac397bcd1f6c..920f46d2fd58 100644 --- a/packages/google-cloud-container/google/cloud/container_v1/services/cluster_manager/async_client.py +++ b/packages/google-cloud-container/google/cloud/container_v1/services/cluster_manager/async_client.py @@ -244,7 +244,7 @@ async def sample_list_clusters(): project_id (:class:`str`): Deprecated. The Google Developers Console `project ID or project - number `__. + number `__. This field has been deprecated and replaced by the parent field. @@ -377,7 +377,7 @@ async def sample_get_cluster(): project_id (:class:`str`): Deprecated. The Google Developers Console `project ID or project - number `__. + number `__. This field has been deprecated and replaced by the name field. @@ -529,7 +529,7 @@ async def sample_create_cluster(): project_id (:class:`str`): Deprecated. The Google Developers Console `project ID or project - number `__. + number `__. This field has been deprecated and replaced by the parent field. @@ -662,7 +662,7 @@ async def sample_update_cluster(): project_id (:class:`str`): Deprecated. The Google Developers Console `project ID or project - number `__. + number `__. This field has been deprecated and replaced by the name field. @@ -959,7 +959,7 @@ async def sample_set_logging_service(): project_id (:class:`str`): Deprecated. The Google Developers Console `project ID or project - number `__. + number `__. This field has been deprecated and replaced by the name field. @@ -1118,7 +1118,7 @@ async def sample_set_monitoring_service(): project_id (:class:`str`): Deprecated. The Google Developers Console `project ID or project - number `__. + number `__. This field has been deprecated and replaced by the name field. @@ -1278,7 +1278,7 @@ async def sample_set_addons_config(): project_id (:class:`str`): Deprecated. The Google Developers Console `project ID or project - number `__. + number `__. This field has been deprecated and replaced by the name field. @@ -1426,7 +1426,7 @@ async def sample_set_locations(): project_id (:class:`str`): Deprecated. The Google Developers Console `project ID or project - number `__. + number `__. This field has been deprecated and replaced by the name field. @@ -1582,7 +1582,7 @@ async def sample_update_master(): project_id (:class:`str`): Deprecated. The Google Developers Console `project ID or project - number `__. + number `__. This field has been deprecated and replaced by the name field. @@ -1824,7 +1824,7 @@ async def sample_delete_cluster(): project_id (:class:`str`): Deprecated. The Google Developers Console `project ID or project - number `__. + number `__. This field has been deprecated and replaced by the name field. @@ -1967,7 +1967,7 @@ async def sample_list_operations(): project_id (:class:`str`): Deprecated. The Google Developers Console `project ID or project - number `__. + number `__. This field has been deprecated and replaced by the parent field. @@ -2089,7 +2089,7 @@ async def sample_get_operation(): project_id (:class:`str`): Deprecated. The Google Developers Console `project ID or project - number `__. + number `__. This field has been deprecated and replaced by the name field. @@ -2229,7 +2229,7 @@ async def sample_cancel_operation(): project_id (:class:`str`): Deprecated. The Google Developers Console `project ID or project - number `__. + number `__. This field has been deprecated and replaced by the name field. @@ -2351,7 +2351,7 @@ async def sample_get_server_config(): project_id (:class:`str`): Deprecated. The Google Developers Console `project ID or project - number `__. + number `__. This field has been deprecated and replaced by the name field. @@ -2560,7 +2560,7 @@ async def sample_list_node_pools(): project_id (:class:`str`): Deprecated. The Google Developers Console `project ID or project - number `__. + number `__. This field has been deprecated and replaced by the parent field. @@ -2585,7 +2585,7 @@ async def sample_list_node_pools(): on the ``request`` instance; if ``request`` is provided, this should not be set. parent (:class:`str`): - The parent (project, location, cluster id) where the + The parent (project, location, cluster name) where the node pools will be listed. Specified in the format ``projects/*/locations/*/clusters/*``. @@ -2702,7 +2702,7 @@ async def sample_get_node_pool(): project_id (:class:`str`): Deprecated. The Google Developers Console `project ID or project - number `__. + number `__. This field has been deprecated and replaced by the name field. @@ -2862,7 +2862,7 @@ async def sample_create_node_pool(): project_id (:class:`str`): Deprecated. The Google Developers Console `project ID or project - number `__. + number `__. This field has been deprecated and replaced by the parent field. @@ -2892,7 +2892,7 @@ async def sample_create_node_pool(): on the ``request`` instance; if ``request`` is provided, this should not be set. parent (:class:`str`): - The parent (project, location, cluster id) where the + The parent (project, location, cluster name) where the node pool will be created. Specified in the format ``projects/*/locations/*/clusters/*``. @@ -3003,7 +3003,7 @@ async def sample_delete_node_pool(): project_id (:class:`str`): Deprecated. The Google Developers Console `project ID or project - number `__. + number `__. This field has been deprecated and replaced by the name field. @@ -3118,6 +3118,67 @@ async def sample_delete_node_pool(): # Done; return the response. return response + async def complete_node_pool_upgrade( + self, + request: Union[cluster_service.CompleteNodePoolUpgradeRequest, dict] = None, + *, + retry: OptionalRetry = gapic_v1.method.DEFAULT, + timeout: float = None, + metadata: Sequence[Tuple[str, str]] = (), + ) -> None: + r"""CompleteNodePoolUpgrade will signal an on-going node + pool upgrade to complete. + + .. code-block:: python + + from google.cloud import container_v1 + + async def sample_complete_node_pool_upgrade(): + # Create a client + client = container_v1.ClusterManagerAsyncClient() + + # Initialize request argument(s) + request = container_v1.CompleteNodePoolUpgradeRequest( + ) + + # Make the request + await client.complete_node_pool_upgrade(request=request) + + Args: + request (Union[google.cloud.container_v1.types.CompleteNodePoolUpgradeRequest, dict]): + The request object. CompleteNodePoolUpgradeRequest sets + the name of target node pool to complete upgrade. + retry (google.api_core.retry.Retry): Designation of what errors, if any, + should be retried. + timeout (float): The timeout for this request. + metadata (Sequence[Tuple[str, str]]): Strings which should be + sent along with the request as metadata. + """ + # Create or coerce a protobuf request object. + request = cluster_service.CompleteNodePoolUpgradeRequest(request) + + # Wrap the RPC method; this adds retry and timeout information, + # and friendly error handling. + rpc = gapic_v1.method_async.wrap_method( + self._client._transport.complete_node_pool_upgrade, + default_timeout=None, + client_info=DEFAULT_CLIENT_INFO, + ) + + # Certain fields should be provided within the metadata header; + # add these here. + metadata = tuple(metadata) + ( + gapic_v1.routing_header.to_grpc_metadata((("name", request.name),)), + ) + + # Send the request. + await rpc( + request, + retry=retry, + timeout=timeout, + metadata=metadata, + ) + async def rollback_node_pool_upgrade( self, request: Union[cluster_service.RollbackNodePoolUpgradeRequest, dict] = None, @@ -3162,7 +3223,7 @@ async def sample_rollback_node_pool_upgrade(): project_id (:class:`str`): Deprecated. The Google Developers Console `project ID or project - number `__. + number `__. This field has been deprecated and replaced by the name field. @@ -3462,7 +3523,7 @@ async def sample_set_legacy_abac(): project_id (:class:`str`): Deprecated. The Google Developers Console `project ID or project - number `__. + number `__. This field has been deprecated and replaced by the name field. @@ -3495,8 +3556,8 @@ async def sample_set_legacy_abac(): on the ``request`` instance; if ``request`` is provided, this should not be set. name (:class:`str`): - The name (project, location, cluster id) of the cluster - to set legacy abac. Specified in the format + The name (project, location, cluster name) of the + cluster to set legacy abac. Specified in the format ``projects/*/locations/*/clusters/*``. This corresponds to the ``name`` field @@ -3606,7 +3667,7 @@ async def sample_start_ip_rotation(): project_id (:class:`str`): Deprecated. The Google Developers Console `project ID or project - number `__. + number `__. This field has been deprecated and replaced by the name field. @@ -3631,8 +3692,8 @@ async def sample_start_ip_rotation(): on the ``request`` instance; if ``request`` is provided, this should not be set. name (:class:`str`): - The name (project, location, cluster id) of the cluster - to start IP rotation. Specified in the format + The name (project, location, cluster name) of the + cluster to start IP rotation. Specified in the format ``projects/*/locations/*/clusters/*``. This corresponds to the ``name`` field @@ -3739,7 +3800,7 @@ async def sample_complete_ip_rotation(): project_id (:class:`str`): Deprecated. The Google Developers Console `project ID or project - number `__. + number `__. This field has been deprecated and replaced by the name field. @@ -3764,8 +3825,8 @@ async def sample_complete_ip_rotation(): on the ``request`` instance; if ``request`` is provided, this should not be set. name (:class:`str`): - The name (project, location, cluster id) of the cluster - to complete IP rotation. Specified in the format + The name (project, location, cluster name) of the + cluster to complete IP rotation. Specified in the format ``projects/*/locations/*/clusters/*``. This corresponds to the ``name`` field @@ -3951,7 +4012,7 @@ async def sample_set_network_policy(): project_id (:class:`str`): Deprecated. The Google Developers Console `project ID or project - number `__. + number `__. This field has been deprecated and replaced by the name field. @@ -3983,9 +4044,9 @@ async def sample_set_network_policy(): on the ``request`` instance; if ``request`` is provided, this should not be set. name (:class:`str`): - The name (project, location, cluster id) of the cluster - to set networking policy. Specified in the format - ``projects/*/locations/*/clusters/*``. + The name (project, location, cluster name) of the + cluster to set networking policy. Specified in the + format ``projects/*/locations/*/clusters/*``. This corresponds to the ``name`` field on the ``request`` instance; if ``request`` is provided, this @@ -4097,7 +4158,7 @@ async def sample_set_maintenance_policy(): project_id (:class:`str`): Required. The Google Developers Console `project ID or project - number `__. + number `__. This corresponds to the ``project_id`` field on the ``request`` instance; if ``request`` is provided, this @@ -4126,9 +4187,9 @@ async def sample_set_maintenance_policy(): on the ``request`` instance; if ``request`` is provided, this should not be set. name (:class:`str`): - The name (project, location, cluster id) of the cluster - to set maintenance policy. Specified in the format - ``projects/*/locations/*/clusters/*``. + The name (project, location, cluster name) of the + cluster to set maintenance policy. Specified in the + format ``projects/*/locations/*/clusters/*``. This corresponds to the ``name`` field on the ``request`` instance; if ``request`` is provided, this diff --git a/packages/google-cloud-container/google/cloud/container_v1/services/cluster_manager/client.py b/packages/google-cloud-container/google/cloud/container_v1/services/cluster_manager/client.py index 4f7bf8940160..19d86d1f72e3 100644 --- a/packages/google-cloud-container/google/cloud/container_v1/services/cluster_manager/client.py +++ b/packages/google-cloud-container/google/cloud/container_v1/services/cluster_manager/client.py @@ -423,6 +423,7 @@ def __init__( quota_project_id=client_options.quota_project_id, client_info=client_info, always_use_jwt_access=True, + api_audience=client_options.api_audience, ) def list_clusters( @@ -463,7 +464,7 @@ def sample_list_clusters(): project_id (str): Deprecated. The Google Developers Console `project ID or project - number `__. + number `__. This field has been deprecated and replaced by the parent field. @@ -586,7 +587,7 @@ def sample_get_cluster(): project_id (str): Deprecated. The Google Developers Console `project ID or project - number `__. + number `__. This field has been deprecated and replaced by the name field. @@ -728,7 +729,7 @@ def sample_create_cluster(): project_id (str): Deprecated. The Google Developers Console `project ID or project - number `__. + number `__. This field has been deprecated and replaced by the parent field. @@ -861,7 +862,7 @@ def sample_update_cluster(): project_id (str): Deprecated. The Google Developers Console `project ID or project - number `__. + number `__. This field has been deprecated and replaced by the name field. @@ -1162,7 +1163,7 @@ def sample_set_logging_service(): project_id (str): Deprecated. The Google Developers Console `project ID or project - number `__. + number `__. This field has been deprecated and replaced by the name field. @@ -1321,7 +1322,7 @@ def sample_set_monitoring_service(): project_id (str): Deprecated. The Google Developers Console `project ID or project - number `__. + number `__. This field has been deprecated and replaced by the name field. @@ -1481,7 +1482,7 @@ def sample_set_addons_config(): project_id (str): Deprecated. The Google Developers Console `project ID or project - number `__. + number `__. This field has been deprecated and replaced by the name field. @@ -1629,7 +1630,7 @@ def sample_set_locations(): project_id (str): Deprecated. The Google Developers Console `project ID or project - number `__. + number `__. This field has been deprecated and replaced by the name field. @@ -1785,7 +1786,7 @@ def sample_update_master(): project_id (str): Deprecated. The Google Developers Console `project ID or project - number `__. + number `__. This field has been deprecated and replaced by the name field. @@ -2028,7 +2029,7 @@ def sample_delete_cluster(): project_id (str): Deprecated. The Google Developers Console `project ID or project - number `__. + number `__. This field has been deprecated and replaced by the name field. @@ -2161,7 +2162,7 @@ def sample_list_operations(): project_id (str): Deprecated. The Google Developers Console `project ID or project - number `__. + number `__. This field has been deprecated and replaced by the parent field. @@ -2273,7 +2274,7 @@ def sample_get_operation(): project_id (str): Deprecated. The Google Developers Console `project ID or project - number `__. + number `__. This field has been deprecated and replaced by the name field. @@ -2403,7 +2404,7 @@ def sample_cancel_operation(): project_id (str): Deprecated. The Google Developers Console `project ID or project - number `__. + number `__. This field has been deprecated and replaced by the name field. @@ -2525,7 +2526,7 @@ def sample_get_server_config(): project_id (str): Deprecated. The Google Developers Console `project ID or project - number `__. + number `__. This field has been deprecated and replaced by the name field. @@ -2725,7 +2726,7 @@ def sample_list_node_pools(): project_id (str): Deprecated. The Google Developers Console `project ID or project - number `__. + number `__. This field has been deprecated and replaced by the parent field. @@ -2750,7 +2751,7 @@ def sample_list_node_pools(): on the ``request`` instance; if ``request`` is provided, this should not be set. parent (str): - The parent (project, location, cluster id) where the + The parent (project, location, cluster name) where the node pools will be listed. Specified in the format ``projects/*/locations/*/clusters/*``. @@ -2857,7 +2858,7 @@ def sample_get_node_pool(): project_id (str): Deprecated. The Google Developers Console `project ID or project - number `__. + number `__. This field has been deprecated and replaced by the name field. @@ -3007,7 +3008,7 @@ def sample_create_node_pool(): project_id (str): Deprecated. The Google Developers Console `project ID or project - number `__. + number `__. This field has been deprecated and replaced by the parent field. @@ -3037,7 +3038,7 @@ def sample_create_node_pool(): on the ``request`` instance; if ``request`` is provided, this should not be set. parent (str): - The parent (project, location, cluster id) where the + The parent (project, location, cluster name) where the node pool will be created. Specified in the format ``projects/*/locations/*/clusters/*``. @@ -3148,7 +3149,7 @@ def sample_delete_node_pool(): project_id (str): Deprecated. The Google Developers Console `project ID or project - number `__. + number `__. This field has been deprecated and replaced by the name field. @@ -3253,6 +3254,70 @@ def sample_delete_node_pool(): # Done; return the response. return response + def complete_node_pool_upgrade( + self, + request: Union[cluster_service.CompleteNodePoolUpgradeRequest, dict] = None, + *, + retry: OptionalRetry = gapic_v1.method.DEFAULT, + timeout: float = None, + metadata: Sequence[Tuple[str, str]] = (), + ) -> None: + r"""CompleteNodePoolUpgrade will signal an on-going node + pool upgrade to complete. + + .. code-block:: python + + from google.cloud import container_v1 + + def sample_complete_node_pool_upgrade(): + # Create a client + client = container_v1.ClusterManagerClient() + + # Initialize request argument(s) + request = container_v1.CompleteNodePoolUpgradeRequest( + ) + + # Make the request + client.complete_node_pool_upgrade(request=request) + + Args: + request (Union[google.cloud.container_v1.types.CompleteNodePoolUpgradeRequest, dict]): + The request object. CompleteNodePoolUpgradeRequest sets + the name of target node pool to complete upgrade. + retry (google.api_core.retry.Retry): Designation of what errors, if any, + should be retried. + timeout (float): The timeout for this request. + metadata (Sequence[Tuple[str, str]]): Strings which should be + sent along with the request as metadata. + """ + # Create or coerce a protobuf request object. + # Minor optimization to avoid making a copy if the user passes + # in a cluster_service.CompleteNodePoolUpgradeRequest. + # There's no risk of modifying the input as we've already verified + # there are no flattened fields. + if not isinstance(request, cluster_service.CompleteNodePoolUpgradeRequest): + request = cluster_service.CompleteNodePoolUpgradeRequest(request) + + # Wrap the RPC method; this adds retry and timeout information, + # and friendly error handling. + rpc = self._transport._wrapped_methods[ + self._transport.complete_node_pool_upgrade + ] + + # Certain fields should be provided within the metadata header; + # add these here. + metadata = tuple(metadata) + ( + gapic_v1.routing_header.to_grpc_metadata((("name", request.name),)), + ) + + # Send the request. + rpc( + request, + retry=retry, + timeout=timeout, + metadata=metadata, + ) + def rollback_node_pool_upgrade( self, request: Union[cluster_service.RollbackNodePoolUpgradeRequest, dict] = None, @@ -3297,7 +3362,7 @@ def sample_rollback_node_pool_upgrade(): project_id (str): Deprecated. The Google Developers Console `project ID or project - number `__. + number `__. This field has been deprecated and replaced by the name field. @@ -3601,7 +3666,7 @@ def sample_set_legacy_abac(): project_id (str): Deprecated. The Google Developers Console `project ID or project - number `__. + number `__. This field has been deprecated and replaced by the name field. @@ -3634,8 +3699,8 @@ def sample_set_legacy_abac(): on the ``request`` instance; if ``request`` is provided, this should not be set. name (str): - The name (project, location, cluster id) of the cluster - to set legacy abac. Specified in the format + The name (project, location, cluster name) of the + cluster to set legacy abac. Specified in the format ``projects/*/locations/*/clusters/*``. This corresponds to the ``name`` field @@ -3745,7 +3810,7 @@ def sample_start_ip_rotation(): project_id (str): Deprecated. The Google Developers Console `project ID or project - number `__. + number `__. This field has been deprecated and replaced by the name field. @@ -3770,8 +3835,8 @@ def sample_start_ip_rotation(): on the ``request`` instance; if ``request`` is provided, this should not be set. name (str): - The name (project, location, cluster id) of the cluster - to start IP rotation. Specified in the format + The name (project, location, cluster name) of the + cluster to start IP rotation. Specified in the format ``projects/*/locations/*/clusters/*``. This corresponds to the ``name`` field @@ -3878,7 +3943,7 @@ def sample_complete_ip_rotation(): project_id (str): Deprecated. The Google Developers Console `project ID or project - number `__. + number `__. This field has been deprecated and replaced by the name field. @@ -3903,8 +3968,8 @@ def sample_complete_ip_rotation(): on the ``request`` instance; if ``request`` is provided, this should not be set. name (str): - The name (project, location, cluster id) of the cluster - to complete IP rotation. Specified in the format + The name (project, location, cluster name) of the + cluster to complete IP rotation. Specified in the format ``projects/*/locations/*/clusters/*``. This corresponds to the ``name`` field @@ -4091,7 +4156,7 @@ def sample_set_network_policy(): project_id (str): Deprecated. The Google Developers Console `project ID or project - number `__. + number `__. This field has been deprecated and replaced by the name field. @@ -4123,9 +4188,9 @@ def sample_set_network_policy(): on the ``request`` instance; if ``request`` is provided, this should not be set. name (str): - The name (project, location, cluster id) of the cluster - to set networking policy. Specified in the format - ``projects/*/locations/*/clusters/*``. + The name (project, location, cluster name) of the + cluster to set networking policy. Specified in the + format ``projects/*/locations/*/clusters/*``. This corresponds to the ``name`` field on the ``request`` instance; if ``request`` is provided, this @@ -4237,7 +4302,7 @@ def sample_set_maintenance_policy(): project_id (str): Required. The Google Developers Console `project ID or project - number `__. + number `__. This corresponds to the ``project_id`` field on the ``request`` instance; if ``request`` is provided, this @@ -4266,9 +4331,9 @@ def sample_set_maintenance_policy(): on the ``request`` instance; if ``request`` is provided, this should not be set. name (str): - The name (project, location, cluster id) of the cluster - to set maintenance policy. Specified in the format - ``projects/*/locations/*/clusters/*``. + The name (project, location, cluster name) of the + cluster to set maintenance policy. Specified in the + format ``projects/*/locations/*/clusters/*``. This corresponds to the ``name`` field on the ``request`` instance; if ``request`` is provided, this diff --git a/packages/google-cloud-container/google/cloud/container_v1/services/cluster_manager/transports/base.py b/packages/google-cloud-container/google/cloud/container_v1/services/cluster_manager/transports/base.py index fbcaad68c73a..cc413a688a55 100644 --- a/packages/google-cloud-container/google/cloud/container_v1/services/cluster_manager/transports/base.py +++ b/packages/google-cloud-container/google/cloud/container_v1/services/cluster_manager/transports/base.py @@ -55,6 +55,7 @@ def __init__( quota_project_id: Optional[str] = None, client_info: gapic_v1.client_info.ClientInfo = DEFAULT_CLIENT_INFO, always_use_jwt_access: Optional[bool] = False, + api_audience: Optional[str] = None, **kwargs, ) -> None: """Instantiate the transport. @@ -82,11 +83,6 @@ def __init__( be used for service account credentials. """ - # Save the hostname. Default to port 443 (HTTPS) if none is specified. - if ":" not in host: - host += ":443" - self._host = host - scopes_kwargs = {"scopes": scopes, "default_scopes": self.AUTH_SCOPES} # Save the scopes. @@ -107,6 +103,11 @@ def __init__( credentials, _ = google.auth.default( **scopes_kwargs, quota_project_id=quota_project_id ) + # Don't apply audience if the credentials file passed from user. + if hasattr(credentials, "with_gdch_audience"): + credentials = credentials.with_gdch_audience( + api_audience if api_audience else host + ) # If the credentials are service account credentials, then always try to use self signed JWT. if ( @@ -119,6 +120,11 @@ def __init__( # Save the credentials. self._credentials = credentials + # Save the hostname. Default to port 443 (HTTPS) if none is specified. + if ":" not in host: + host += ":443" + self._host = host + def _prep_wrapped_messages(self, client_info): # Precompute the wrapped methods. self._wrapped_methods = { @@ -322,6 +328,11 @@ def _prep_wrapped_messages(self, client_info): default_timeout=20.0, client_info=client_info, ), + self.complete_node_pool_upgrade: gapic_v1.method.wrap_method( + self.complete_node_pool_upgrade, + default_timeout=None, + client_info=client_info, + ), self.rollback_node_pool_upgrade: gapic_v1.method.wrap_method( self.rollback_node_pool_upgrade, default_timeout=45.0, @@ -593,6 +604,15 @@ def delete_node_pool( ]: raise NotImplementedError() + @property + def complete_node_pool_upgrade( + self, + ) -> Callable[ + [cluster_service.CompleteNodePoolUpgradeRequest], + Union[empty_pb2.Empty, Awaitable[empty_pb2.Empty]], + ]: + raise NotImplementedError() + @property def rollback_node_pool_upgrade( self, diff --git a/packages/google-cloud-container/google/cloud/container_v1/services/cluster_manager/transports/grpc.py b/packages/google-cloud-container/google/cloud/container_v1/services/cluster_manager/transports/grpc.py index 79643edcc650..6403577c43b4 100644 --- a/packages/google-cloud-container/google/cloud/container_v1/services/cluster_manager/transports/grpc.py +++ b/packages/google-cloud-container/google/cloud/container_v1/services/cluster_manager/transports/grpc.py @@ -58,6 +58,7 @@ def __init__( quota_project_id: Optional[str] = None, client_info: gapic_v1.client_info.ClientInfo = DEFAULT_CLIENT_INFO, always_use_jwt_access: Optional[bool] = False, + api_audience: Optional[str] = None, ) -> None: """Instantiate the transport. @@ -153,6 +154,7 @@ def __init__( quota_project_id=quota_project_id, client_info=client_info, always_use_jwt_access=always_use_jwt_access, + api_audience=api_audience, ) if not self._grpc_channel: @@ -849,6 +851,33 @@ def delete_node_pool( ) return self._stubs["delete_node_pool"] + @property + def complete_node_pool_upgrade( + self, + ) -> Callable[[cluster_service.CompleteNodePoolUpgradeRequest], empty_pb2.Empty]: + r"""Return a callable for the complete node pool upgrade method over gRPC. + + CompleteNodePoolUpgrade will signal an on-going node + pool upgrade to complete. + + Returns: + Callable[[~.CompleteNodePoolUpgradeRequest], + ~.Empty]: + A function that, when called, will call the underlying RPC + on the server. + """ + # Generate a "stub function" on-the-fly which will actually make + # the request. + # gRPC handles serialization and deserialization, so we just need + # to pass in the functions for each. + if "complete_node_pool_upgrade" not in self._stubs: + self._stubs["complete_node_pool_upgrade"] = self.grpc_channel.unary_unary( + "/google.container.v1.ClusterManager/CompleteNodePoolUpgrade", + request_serializer=cluster_service.CompleteNodePoolUpgradeRequest.serialize, + response_deserializer=empty_pb2.Empty.FromString, + ) + return self._stubs["complete_node_pool_upgrade"] + @property def rollback_node_pool_upgrade( self, diff --git a/packages/google-cloud-container/google/cloud/container_v1/services/cluster_manager/transports/grpc_asyncio.py b/packages/google-cloud-container/google/cloud/container_v1/services/cluster_manager/transports/grpc_asyncio.py index a895fd76abf8..4465c959a70a 100644 --- a/packages/google-cloud-container/google/cloud/container_v1/services/cluster_manager/transports/grpc_asyncio.py +++ b/packages/google-cloud-container/google/cloud/container_v1/services/cluster_manager/transports/grpc_asyncio.py @@ -103,6 +103,7 @@ def __init__( quota_project_id=None, client_info: gapic_v1.client_info.ClientInfo = DEFAULT_CLIENT_INFO, always_use_jwt_access: Optional[bool] = False, + api_audience: Optional[str] = None, ) -> None: """Instantiate the transport. @@ -198,6 +199,7 @@ def __init__( quota_project_id=quota_project_id, client_info=client_info, always_use_jwt_access=always_use_jwt_access, + api_audience=api_audience, ) if not self._grpc_channel: @@ -885,6 +887,35 @@ def delete_node_pool( ) return self._stubs["delete_node_pool"] + @property + def complete_node_pool_upgrade( + self, + ) -> Callable[ + [cluster_service.CompleteNodePoolUpgradeRequest], Awaitable[empty_pb2.Empty] + ]: + r"""Return a callable for the complete node pool upgrade method over gRPC. + + CompleteNodePoolUpgrade will signal an on-going node + pool upgrade to complete. + + Returns: + Callable[[~.CompleteNodePoolUpgradeRequest], + Awaitable[~.Empty]]: + A function that, when called, will call the underlying RPC + on the server. + """ + # Generate a "stub function" on-the-fly which will actually make + # the request. + # gRPC handles serialization and deserialization, so we just need + # to pass in the functions for each. + if "complete_node_pool_upgrade" not in self._stubs: + self._stubs["complete_node_pool_upgrade"] = self.grpc_channel.unary_unary( + "/google.container.v1.ClusterManager/CompleteNodePoolUpgrade", + request_serializer=cluster_service.CompleteNodePoolUpgradeRequest.serialize, + response_deserializer=empty_pb2.Empty.FromString, + ) + return self._stubs["complete_node_pool_upgrade"] + @property def rollback_node_pool_upgrade( self, diff --git a/packages/google-cloud-container/google/cloud/container_v1/types/__init__.py b/packages/google-cloud-container/google/cloud/container_v1/types/__init__.py index a6e864856829..993dc324de94 100644 --- a/packages/google-cloud-container/google/cloud/container_v1/types/__init__.py +++ b/packages/google-cloud-container/google/cloud/container_v1/types/__init__.py @@ -22,6 +22,7 @@ AutoprovisioningNodePoolDefaults, AutoUpgradeOptions, BinaryAuthorization, + BlueGreenSettings, CancelOperationRequest, ClientCertificateConfig, CloudRunConfig, @@ -29,6 +30,7 @@ ClusterAutoscaling, ClusterUpdate, CompleteIPRotationRequest, + CompleteNodePoolUpgradeRequest, ConfidentialNodes, ConfigConnectorConfig, CreateClusterRequest, @@ -52,8 +54,10 @@ GetOpenIDConfigResponse, GetOperationRequest, GetServerConfigRequest, + GPUSharingConfig, HorizontalPodAutoscaling, HttpLoadBalancing, + IdentityServiceConfig, ILBSubsettingConfig, IntraNodeVisibilityConfig, IPAllocationPolicy, @@ -74,6 +78,7 @@ MaintenanceExclusionOptions, MaintenancePolicy, MaintenanceWindow, + ManagedPrometheusConfig, MasterAuth, MasterAuthorizedNetworksConfig, MaxPodsConstraint, @@ -83,15 +88,20 @@ NetworkConfig, NetworkPolicy, NetworkPolicyConfig, + NetworkTags, NodeConfig, NodeConfigDefaults, NodeKubeletConfig, + NodeLabels, NodeManagement, NodeNetworkConfig, NodePool, + NodePoolAutoConfig, NodePoolAutoscaling, NodePoolDefaults, + NodePoolUpdateStrategy, NodeTaint, + NodeTaints, NotificationConfig, Operation, OperationProgress, @@ -148,6 +158,7 @@ "AutoprovisioningNodePoolDefaults", "AutoUpgradeOptions", "BinaryAuthorization", + "BlueGreenSettings", "CancelOperationRequest", "ClientCertificateConfig", "CloudRunConfig", @@ -155,6 +166,7 @@ "ClusterAutoscaling", "ClusterUpdate", "CompleteIPRotationRequest", + "CompleteNodePoolUpgradeRequest", "ConfidentialNodes", "ConfigConnectorConfig", "CreateClusterRequest", @@ -177,8 +189,10 @@ "GetOpenIDConfigResponse", "GetOperationRequest", "GetServerConfigRequest", + "GPUSharingConfig", "HorizontalPodAutoscaling", "HttpLoadBalancing", + "IdentityServiceConfig", "ILBSubsettingConfig", "IntraNodeVisibilityConfig", "IPAllocationPolicy", @@ -199,6 +213,7 @@ "MaintenanceExclusionOptions", "MaintenancePolicy", "MaintenanceWindow", + "ManagedPrometheusConfig", "MasterAuth", "MasterAuthorizedNetworksConfig", "MaxPodsConstraint", @@ -208,15 +223,19 @@ "NetworkConfig", "NetworkPolicy", "NetworkPolicyConfig", + "NetworkTags", "NodeConfig", "NodeConfigDefaults", "NodeKubeletConfig", + "NodeLabels", "NodeManagement", "NodeNetworkConfig", "NodePool", + "NodePoolAutoConfig", "NodePoolAutoscaling", "NodePoolDefaults", "NodeTaint", + "NodeTaints", "NotificationConfig", "Operation", "OperationProgress", @@ -261,6 +280,7 @@ "WorkloadIdentityConfig", "WorkloadMetadataConfig", "DatapathProvider", + "NodePoolUpdateStrategy", "PrivateIPv6GoogleAccess", "UpgradeResourceType", ) diff --git a/packages/google-cloud-container/google/cloud/container_v1/types/cluster_service.py b/packages/google-cloud-container/google/cloud/container_v1/types/cluster_service.py index 33f1b470238a..77bf2d11701e 100644 --- a/packages/google-cloud-container/google/cloud/container_v1/types/cluster_service.py +++ b/packages/google-cloud-container/google/cloud/container_v1/types/cluster_service.py @@ -13,6 +13,7 @@ # See the License for the specific language governing permissions and # limitations under the License. # +from google.protobuf import duration_pb2 # type: ignore from google.protobuf import timestamp_pb2 # type: ignore from google.protobuf import wrappers_pb2 # type: ignore from google.rpc import code_pb2 # type: ignore @@ -23,8 +24,9 @@ package="google.container.v1", manifest={ "PrivateIPv6GoogleAccess", - "DatapathProvider", "UpgradeResourceType", + "DatapathProvider", + "NodePoolUpdateStrategy", "LinuxNodeConfig", "NodeKubeletConfig", "NodeConfig", @@ -35,6 +37,9 @@ "GcfsConfig", "ReservationAffinity", "NodeTaint", + "NodeTaints", + "NodeLabels", + "NetworkTags", "MasterAuth", "ClientCertificateConfig", "AddonsConfig", @@ -56,6 +61,7 @@ "BinaryAuthorization", "IPAllocationPolicy", "Cluster", + "NodePoolAutoConfig", "NodePoolDefaults", "NodeConfigDefaults", "ClusterUpdate", @@ -85,6 +91,7 @@ "DeleteNodePoolRequest", "ListNodePoolsRequest", "GetNodePoolRequest", + "BlueGreenSettings", "NodePool", "NodeManagement", "AutoUpgradeOptions", @@ -96,6 +103,7 @@ "DailyMaintenanceWindow", "SetNodePoolManagementRequest", "SetNodePoolSizeRequest", + "CompleteNodePoolUpgradeRequest", "RollbackNodePoolUpgradeRequest", "ListNodePoolsResponse", "ClusterAutoscaling", @@ -107,6 +115,7 @@ "StartIPRotationRequest", "CompleteIPRotationRequest", "AcceleratorConfig", + "GPUSharingConfig", "WorkloadMetadataConfig", "SetNetworkPolicyRequest", "SetMaintenancePolicyRequest", @@ -124,6 +133,7 @@ "DNSConfig", "MaxPodsConstraint", "WorkloadIdentityConfig", + "IdentityServiceConfig", "MeshCertificates", "DatabaseEncryption", "ListUsableSubnetworksRequest", @@ -145,6 +155,7 @@ "LoggingComponentConfig", "MonitoringConfig", "MonitoringComponentConfig", + "ManagedPrometheusConfig", }, ) @@ -159,6 +170,15 @@ class PrivateIPv6GoogleAccess(proto.Enum): PRIVATE_IPV6_GOOGLE_ACCESS_BIDIRECTIONAL = 3 +class UpgradeResourceType(proto.Enum): + r"""UpgradeResourceType is the resource type that is upgrading. + It is used in upgrade notifications. + """ + UPGRADE_RESOURCE_TYPE_UNSPECIFIED = 0 + MASTER = 1 + NODE_POOL = 2 + + class DatapathProvider(proto.Enum): r"""The datapath provider selects the implementation of the Kubernetes networking model for service resolution and network @@ -169,13 +189,11 @@ class DatapathProvider(proto.Enum): ADVANCED_DATAPATH = 2 -class UpgradeResourceType(proto.Enum): - r"""UpgradeResourceType is the resource type that is upgrading. - It is used in upgrade notifications. - """ - UPGRADE_RESOURCE_TYPE_UNSPECIFIED = 0 - MASTER = 1 - NODE_POOL = 2 +class NodePoolUpdateStrategy(proto.Enum): + r"""Strategy used for node pool update.""" + NODE_POOL_UPDATE_STRATEGY_UNSPECIFIED = 0 + BLUE_GREEN = 2 + SURGE = 3 class LinuxNodeConfig(proto.Message): @@ -188,6 +206,7 @@ class LinuxNodeConfig(proto.Message): The following parameters are supported. + net.core.busy_poll net.core.busy_read net.core.netdev_max_backlog net.core.rmem_max net.core.wmem_default net.core.wmem_max net.core.optmem_max net.core.somaxconn net.ipv4.tcp_rmem net.ipv4.tcp_wmem @@ -238,6 +257,12 @@ class NodeKubeletConfig(proto.Message): optional fraction and a unit suffix, such as "300ms". Valid time units are "ns", "us" (or "µs"), "ms", "s", "m", "h". The value must be a positive duration. + pod_pids_limit (int): + Set the Pod PID limits. See + https://kubernetes.io/docs/concepts/policy/pid-limiting/#pod-pid-limits + Controls the maximum number of processes allowed + to run in a pod. The value must be greater than + or equal to 1024 and less than 4194304. """ cpu_manager_policy = proto.Field( @@ -253,11 +278,20 @@ class NodeKubeletConfig(proto.Message): proto.STRING, number=3, ) + pod_pids_limit = proto.Field( + proto.INT64, + number=4, + ) class NodeConfig(proto.Message): r"""Parameters that describe the nodes in a cluster. + GKE Autopilot clusters do not recognize parameters in + ``NodeConfig``. Use + [AutoprovisioningNodePoolDefaults][google.container.v1.AutoprovisioningNodePoolDefaults] + instead. + Attributes: machine_type (str): The name of a Google Compute Engine `machine @@ -428,6 +462,13 @@ class NodeConfig(proto.Message): Advanced features for the Compute Engine VM. gvnic (google.cloud.container_v1.types.VirtualNIC): Enable or disable gvnic in the node pool. + spot (bool): + Spot flag for enabling Spot VM, which is a + rebrand of the existing preemptible flag. + confidential_nodes (google.cloud.container_v1.types.ConfidentialNodes): + Confidential nodes config. + All the nodes in the node pool will be + Confidential VM once enabled. """ machine_type = proto.Field( @@ -543,6 +584,15 @@ class NodeConfig(proto.Message): number=29, message="VirtualNIC", ) + spot = proto.Field( + proto.BOOL, + number=32, + ) + confidential_nodes = proto.Field( + proto.MESSAGE, + number=35, + message="ConfidentialNodes", + ) class AdvancedMachineFeatures(proto.Message): @@ -615,8 +665,35 @@ class NodeNetworkConfig(proto.Message): This field cannot be changed after the node pool has been created. + network_performance_config (google.cloud.container_v1.types.NodeNetworkConfig.NetworkPerformanceConfig): + Network bandwidth tier configuration. + + This field is a member of `oneof`_ ``_network_performance_config``. """ + class NetworkPerformanceConfig(proto.Message): + r"""Configuration of all network bandwidth tiers + + Attributes: + total_egress_bandwidth_tier (google.cloud.container_v1.types.NodeNetworkConfig.NetworkPerformanceConfig.Tier): + Specifies the total network bandwidth tier + for the NodePool. + + This field is a member of `oneof`_ ``_total_egress_bandwidth_tier``. + """ + + class Tier(proto.Enum): + r"""Node network tier""" + TIER_UNSPECIFIED = 0 + TIER_1 = 1 + + total_egress_bandwidth_tier = proto.Field( + proto.ENUM, + number=1, + optional=True, + enum="NodeNetworkConfig.NetworkPerformanceConfig.Tier", + ) + create_pod_range = proto.Field( proto.BOOL, number=4, @@ -629,6 +706,12 @@ class NodeNetworkConfig(proto.Message): proto.STRING, number=6, ) + network_performance_config = proto.Field( + proto.MESSAGE, + number=11, + optional=True, + message=NetworkPerformanceConfig, + ) class ShieldedInstanceConfig(proto.Message): @@ -783,6 +866,53 @@ class Effect(proto.Enum): ) +class NodeTaints(proto.Message): + r"""Collection of Kubernetes `node + taints `__. + + Attributes: + taints (Sequence[google.cloud.container_v1.types.NodeTaint]): + List of node taints. + """ + + taints = proto.RepeatedField( + proto.MESSAGE, + number=1, + message="NodeTaint", + ) + + +class NodeLabels(proto.Message): + r"""Collection of node-level `Kubernetes + labels `__. + + Attributes: + labels (Mapping[str, str]): + Map of node label keys and node label values. + """ + + labels = proto.MapField( + proto.STRING, + proto.STRING, + number=1, + ) + + +class NetworkTags(proto.Message): + r"""Collection of Compute Engine network tags that can be applied + to a node's underlying VM instance. + + Attributes: + tags (Sequence[str]): + List of network tags. + """ + + tags = proto.RepeatedField( + proto.STRING, + number=1, + ) + + class MasterAuth(proto.Message): r"""The authentication information for accessing the master endpoint. Authentication can be done using HTTP basic auth or @@ -1330,12 +1460,28 @@ class BinaryAuthorization(proto.Message): Enable Binary Authorization for this cluster. If enabled, all container images will be validated by Binary Authorization. + evaluation_mode (google.cloud.container_v1.types.BinaryAuthorization.EvaluationMode): + Mode of operation for binauthz policy + evaluation. Currently the only options are + equivalent to enable/disable. If unspecified, + defaults to DISABLED. """ + class EvaluationMode(proto.Enum): + r"""Binary Authorization mode of operation.""" + EVALUATION_MODE_UNSPECIFIED = 0 + DISABLED = 1 + PROJECT_SINGLETON_POLICY_ENFORCE = 2 + enabled = proto.Field( proto.BOOL, number=1, ) + evaluation_mode = proto.Field( + proto.ENUM, + number=2, + enum=EvaluationMode, + ) class IPAllocationPolicy(proto.Message): @@ -1691,7 +1837,11 @@ class Cluster(proto.Message): notification_config (google.cloud.container_v1.types.NotificationConfig): Notification configuration of the cluster. confidential_nodes (google.cloud.container_v1.types.ConfidentialNodes): - Configuration of Confidential Nodes + Configuration of Confidential Nodes. + All the nodes in the cluster will be + Confidential VM once enabled. + identity_service_config (google.cloud.container_v1.types.IdentityServiceConfig): + Configuration for Identity Service component. self_link (str): [Output only] Server-defined URL for the resource. zone (str): @@ -1797,6 +1947,11 @@ class Cluster(proto.Message): Logging configuration for the cluster. monitoring_config (google.cloud.container_v1.types.MonitoringConfig): Monitoring configuration for the cluster. + node_pool_auto_config (google.cloud.container_v1.types.NodePoolAutoConfig): + Node pool configs that apply to all + auto-provisioned node pools in autopilot + clusters and node auto-provisioning enabled + clusters. """ class Status(proto.Enum): @@ -1978,6 +2133,11 @@ class Status(proto.Enum): number=50, message="ConfidentialNodes", ) + identity_service_config = proto.Field( + proto.MESSAGE, + number=54, + message="IdentityServiceConfig", + ) self_link = proto.Field( proto.STRING, number=100, @@ -2077,6 +2237,33 @@ class Status(proto.Enum): number=133, message="MonitoringConfig", ) + node_pool_auto_config = proto.Field( + proto.MESSAGE, + number=136, + message="NodePoolAutoConfig", + ) + + +class NodePoolAutoConfig(proto.Message): + r"""Node pool configs that apply to all auto-provisioned node + pools in autopilot clusters and node auto-provisioning enabled + clusters. + + Attributes: + network_tags (google.cloud.container_v1.types.NetworkTags): + The list of instance tags applied to all + nodes. Tags are used to identify valid sources + or targets for network firewalls and are + specified by the client during cluster creation. + Each tag within the list must comply with + RFC1035. + """ + + network_tags = proto.Field( + proto.MESSAGE, + number=1, + message="NetworkTags", + ) class NodePoolDefaults(proto.Message): @@ -2100,7 +2287,7 @@ class NodeConfigDefaults(proto.Message): Attributes: gcfs_config (google.cloud.container_v1.types.GcfsConfig): - GCFS (Google Container File System, a.k.a + GCFS (Google Container File System, a.k.a. Riptide) options. """ @@ -2239,6 +2426,9 @@ class ClusterUpdate(proto.Message): The desired logging configuration. desired_monitoring_config (google.cloud.container_v1.types.MonitoringConfig): The desired monitoring configuration. + desired_identity_service_config (google.cloud.container_v1.types.IdentityServiceConfig): + The desired Identity Service component + configuration. desired_service_external_ips_config (google.cloud.container_v1.types.ServiceExternalIPsConfig): ServiceExternalIPsConfig specifies the config for the use of Services with ExternalIPs field. @@ -2257,6 +2447,11 @@ class ClusterUpdate(proto.Message): Kubernetes version desired_gcfs_config (google.cloud.container_v1.types.GcfsConfig): The desired GCFS config for the cluster + desired_node_pool_auto_config_network_tags (google.cloud.container_v1.types.NetworkTags): + The desired network tags that apply to all + auto-provisioned node pools in autopilot + clusters and node auto-provisioning enabled + clusters. """ desired_node_version = proto.Field( @@ -2398,6 +2593,11 @@ class ClusterUpdate(proto.Message): number=65, message="MonitoringConfig", ) + desired_identity_service_config = proto.Field( + proto.MESSAGE, + number=66, + message="IdentityServiceConfig", + ) desired_service_external_ips_config = proto.Field( proto.MESSAGE, number=60, @@ -2412,6 +2612,11 @@ class ClusterUpdate(proto.Message): number=109, message="GcfsConfig", ) + desired_node_pool_auto_config_network_tags = proto.Field( + proto.MESSAGE, + number=110, + message="NetworkTags", + ) class Operation(proto.Message): @@ -2663,7 +2868,7 @@ class CreateClusterRequest(proto.Message): project_id (str): Deprecated. The Google Developers Console `project ID or project - number `__. + number `__. This field has been deprecated and replaced by the parent field. zone (str): @@ -2705,7 +2910,7 @@ class GetClusterRequest(proto.Message): project_id (str): Deprecated. The Google Developers Console `project ID or project - number `__. + number `__. This field has been deprecated and replaced by the name field. zone (str): @@ -2748,7 +2953,7 @@ class UpdateClusterRequest(proto.Message): project_id (str): Deprecated. The Google Developers Console `project ID or project - number `__. + number `__. This field has been deprecated and replaced by the name field. zone (str): @@ -2799,7 +3004,7 @@ class UpdateNodePoolRequest(proto.Message): project_id (str): Deprecated. The Google Developers Console `project ID or project - number `__. + number `__. This field has been deprecated and replaced by the name field. zone (str): @@ -2849,13 +3054,34 @@ class UpdateNodePoolRequest(proto.Message): upgrade_settings (google.cloud.container_v1.types.NodePool.UpgradeSettings): Upgrade settings control disruption and speed of the upgrade. + tags (google.cloud.container_v1.types.NetworkTags): + The desired network tags to be applied to all nodes in the + node pool. If this field is not present, the tags will not + be changed. Otherwise, the existing network tags will be + *replaced* with the provided tags. + taints (google.cloud.container_v1.types.NodeTaints): + The desired node taints to be applied to all nodes in the + node pool. If this field is not present, the taints will not + be changed. Otherwise, the existing node taints will be + *replaced* with the provided taints. + labels (google.cloud.container_v1.types.NodeLabels): + The desired node labels to be applied to all nodes in the + node pool. If this field is not present, the labels will not + be changed. Otherwise, the existing node labels will be + *replaced* with the provided labels. linux_node_config (google.cloud.container_v1.types.LinuxNodeConfig): Parameters that can be configured on Linux nodes. kubelet_config (google.cloud.container_v1.types.NodeKubeletConfig): Node kubelet configs. + node_network_config (google.cloud.container_v1.types.NodeNetworkConfig): + Node network config. gcfs_config (google.cloud.container_v1.types.GcfsConfig): GCFS config. + confidential_nodes (google.cloud.container_v1.types.ConfidentialNodes): + Confidential nodes config. + All the nodes in the node pool will be + Confidential VM once enabled. gvnic (google.cloud.container_v1.types.VirtualNIC): Enable or disable gvnic on the node pool. """ @@ -2902,6 +3128,21 @@ class UpdateNodePoolRequest(proto.Message): number=15, message="NodePool.UpgradeSettings", ) + tags = proto.Field( + proto.MESSAGE, + number=16, + message="NetworkTags", + ) + taints = proto.Field( + proto.MESSAGE, + number=17, + message="NodeTaints", + ) + labels = proto.Field( + proto.MESSAGE, + number=18, + message="NodeLabels", + ) linux_node_config = proto.Field( proto.MESSAGE, number=19, @@ -2912,11 +3153,21 @@ class UpdateNodePoolRequest(proto.Message): number=20, message="NodeKubeletConfig", ) + node_network_config = proto.Field( + proto.MESSAGE, + number=21, + message="NodeNetworkConfig", + ) gcfs_config = proto.Field( proto.MESSAGE, number=22, message="GcfsConfig", ) + confidential_nodes = proto.Field( + proto.MESSAGE, + number=23, + message="ConfidentialNodes", + ) gvnic = proto.Field( proto.MESSAGE, number=29, @@ -2932,7 +3183,7 @@ class SetNodePoolAutoscalingRequest(proto.Message): project_id (str): Deprecated. The Google Developers Console `project ID or project - number `__. + number `__. This field has been deprecated and replaced by the name field. zone (str): @@ -2992,7 +3243,7 @@ class SetLoggingServiceRequest(proto.Message): project_id (str): Deprecated. The Google Developers Console `project ID or project - number `__. + number `__. This field has been deprecated and replaced by the name field. zone (str): @@ -3054,7 +3305,7 @@ class SetMonitoringServiceRequest(proto.Message): project_id (str): Deprecated. The Google Developers Console `project ID or project - number `__. + number `__. This field has been deprecated and replaced by the name field. zone (str): @@ -3117,7 +3368,7 @@ class SetAddonsConfigRequest(proto.Message): project_id (str): Deprecated. The Google Developers Console `project ID or project - number `__. + number `__. This field has been deprecated and replaced by the name field. zone (str): @@ -3168,7 +3419,7 @@ class SetLocationsRequest(proto.Message): project_id (str): Deprecated. The Google Developers Console `project ID or project - number `__. + number `__. This field has been deprecated and replaced by the name field. zone (str): @@ -3224,7 +3475,7 @@ class UpdateMasterRequest(proto.Message): project_id (str): Deprecated. The Google Developers Console `project ID or project - number `__. + number `__. This field has been deprecated and replaced by the name field. zone (str): @@ -3284,7 +3535,7 @@ class SetMasterAuthRequest(proto.Message): project_id (str): Deprecated. The Google Developers Console `project ID or project - number `__. + number `__. This field has been deprecated and replaced by the name field. zone (str): @@ -3349,7 +3600,7 @@ class DeleteClusterRequest(proto.Message): project_id (str): Deprecated. The Google Developers Console `project ID or project - number `__. + number `__. This field has been deprecated and replaced by the name field. zone (str): @@ -3392,7 +3643,7 @@ class ListClustersRequest(proto.Message): project_id (str): Deprecated. The Google Developers Console `project ID or project - number `__. + number `__. This field has been deprecated and replaced by the parent field. zone (str): @@ -3450,7 +3701,7 @@ class GetOperationRequest(proto.Message): project_id (str): Deprecated. The Google Developers Console `project ID or project - number `__. + number `__. This field has been deprecated and replaced by the name field. zone (str): @@ -3493,7 +3744,7 @@ class ListOperationsRequest(proto.Message): project_id (str): Deprecated. The Google Developers Console `project ID or project - number `__. + number `__. This field has been deprecated and replaced by the parent field. zone (str): @@ -3529,7 +3780,7 @@ class CancelOperationRequest(proto.Message): project_id (str): Deprecated. The Google Developers Console `project ID or project - number `__. + number `__. This field has been deprecated and replaced by the name field. zone (str): @@ -3597,7 +3848,7 @@ class GetServerConfigRequest(proto.Message): project_id (str): Deprecated. The Google Developers Console `project ID or project - number `__. + number `__. This field has been deprecated and replaced by the name field. zone (str): @@ -3708,7 +3959,7 @@ class CreateNodePoolRequest(proto.Message): project_id (str): Deprecated. The Google Developers Console `project ID or project - number `__. + number `__. This field has been deprecated and replaced by the parent field. zone (str): @@ -3723,7 +3974,7 @@ class CreateNodePoolRequest(proto.Message): node_pool (google.cloud.container_v1.types.NodePool): Required. The node pool to create. parent (str): - The parent (project, location, cluster id) where the node + The parent (project, location, cluster name) where the node pool will be created. Specified in the format ``projects/*/locations/*/clusters/*``. """ @@ -3758,7 +4009,7 @@ class DeleteNodePoolRequest(proto.Message): project_id (str): Deprecated. The Google Developers Console `project ID or project - number `__. + number `__. This field has been deprecated and replaced by the name field. zone (str): @@ -3809,7 +4060,7 @@ class ListNodePoolsRequest(proto.Message): project_id (str): Deprecated. The Google Developers Console `project ID or project - number `__. + number `__. This field has been deprecated and replaced by the parent field. zone (str): @@ -3822,7 +4073,7 @@ class ListNodePoolsRequest(proto.Message): This field has been deprecated and replaced by the parent field. parent (str): - The parent (project, location, cluster id) where the node + The parent (project, location, cluster name) where the node pools will be listed. Specified in the format ``projects/*/locations/*/clusters/*``. """ @@ -3852,7 +4103,7 @@ class GetNodePoolRequest(proto.Message): project_id (str): Deprecated. The Google Developers Console `project ID or project - number `__. + number `__. This field has been deprecated and replaced by the name field. zone (str): @@ -3896,6 +4147,81 @@ class GetNodePoolRequest(proto.Message): ) +class BlueGreenSettings(proto.Message): + r"""Settings for blue-green upgrade. + + .. _oneof: https://proto-plus-python.readthedocs.io/en/stable/fields.html#oneofs-mutually-exclusive-fields + + Attributes: + standard_rollout_policy (google.cloud.container_v1.types.BlueGreenSettings.StandardRolloutPolicy): + Standard policy for the blue-green upgrade. + + This field is a member of `oneof`_ ``rollout_policy``. + node_pool_soak_duration (google.protobuf.duration_pb2.Duration): + Time needed after draining entire blue pool. + After this period, blue pool will be cleaned up. + + This field is a member of `oneof`_ ``_node_pool_soak_duration``. + """ + + class StandardRolloutPolicy(proto.Message): + r"""Standard rollout policy is the default policy for blue-green. + + This message has `oneof`_ fields (mutually exclusive fields). + For each oneof, at most one member field can be set at the same time. + Setting any member of the oneof automatically clears all other + members. + + .. _oneof: https://proto-plus-python.readthedocs.io/en/stable/fields.html#oneofs-mutually-exclusive-fields + + Attributes: + batch_percentage (float): + Percentage of the bool pool nodes to drain in a batch. The + range of this field should be (0.0, 1.0]. + + This field is a member of `oneof`_ ``update_batch_size``. + batch_node_count (int): + Number of blue nodes to drain in a batch. + + This field is a member of `oneof`_ ``update_batch_size``. + batch_soak_duration (google.protobuf.duration_pb2.Duration): + Soak time after each batch gets drained. + Default to zero. + + This field is a member of `oneof`_ ``_batch_soak_duration``. + """ + + batch_percentage = proto.Field( + proto.FLOAT, + number=1, + oneof="update_batch_size", + ) + batch_node_count = proto.Field( + proto.INT32, + number=2, + oneof="update_batch_size", + ) + batch_soak_duration = proto.Field( + proto.MESSAGE, + number=3, + optional=True, + message=duration_pb2.Duration, + ) + + standard_rollout_policy = proto.Field( + proto.MESSAGE, + number=1, + oneof="rollout_policy", + message=StandardRolloutPolicy, + ) + node_pool_soak_duration = proto.Field( + proto.MESSAGE, + number=2, + optional=True, + message=duration_pb2.Duration, + ) + + class NodePool(proto.Message): r"""NodePool contains the name and configuration for a cluster's node pool. Node pools are a set of nodes (i.e. VM's), with a @@ -3938,7 +4264,9 @@ class NodePool(proto.Message): instance_group_urls (Sequence[str]): [Output only] The resource URLs of the `managed instance groups `__ - associated with this node pool. + associated with this node pool. During the node pool + blue-green upgrade operation, the URLs contain both blue and + green resources. status (google.cloud.container_v1.types.NodePool.Status): [Output only] The status of the nodes in this pool instance. status_message (str): @@ -3965,6 +4293,9 @@ class NodePool(proto.Message): upgrade_settings (google.cloud.container_v1.types.NodePool.UpgradeSettings): Upgrade settings control disruption and speed of the upgrade. + update_info (google.cloud.container_v1.types.NodePool.UpdateInfo): + Output only. [Output only] Update info contains relevant + information during a node pool update. """ class Status(proto.Enum): @@ -3978,30 +4309,57 @@ class Status(proto.Enum): ERROR = 6 class UpgradeSettings(proto.Message): - r"""These upgrade settings control the level of parallelism and - the level of disruption caused by an upgrade. + r"""These upgrade settings control the level of parallelism and the + level of disruption caused by an upgrade. maxUnavailable controls the number of nodes that can be simultaneously unavailable. - maxSurge controls the number of additional nodes that can be - added to the node pool temporarily for the time of the upgrade - to increase the number of available nodes. - - (maxUnavailable + maxSurge) determines the level of parallelism - (how many nodes are being upgraded at the same time). - - Note: upgrades inevitably introduce some disruption since - workloads need to be moved from old nodes to new, upgraded ones. - Even if maxUnavailable=0, this holds true. (Disruption stays - within the limits of PodDisruptionBudget, if it is configured.) - - Consider a hypothetical node pool with 5 nodes having - maxSurge=2, maxUnavailable=1. This means the upgrade process - upgrades 3 nodes simultaneously. It creates 2 additional - (upgraded) nodes, then it brings down 3 old (not yet upgraded) - nodes at the same time. This ensures that there are always at - least 4 nodes available. + maxSurge controls the number of additional nodes that can be added + to the node pool temporarily for the time of the upgrade to increase + the number of available nodes. + + (maxUnavailable + maxSurge) determines the level of parallelism (how + many nodes are being upgraded at the same time). + + Note: upgrades inevitably introduce some disruption since workloads + need to be moved from old nodes to new, upgraded ones. Even if + maxUnavailable=0, this holds true. (Disruption stays within the + limits of PodDisruptionBudget, if it is configured.) + + Consider a hypothetical node pool with 5 nodes having maxSurge=2, + maxUnavailable=1. This means the upgrade process upgrades 3 nodes + simultaneously. It creates 2 additional (upgraded) nodes, then it + brings down 3 old (not yet upgraded) nodes at the same time. This + ensures that there are always at least 4 nodes available. + + These upgrade settings configure the upgrade strategy for the node + pool. Use strategy to switch between the strategies applied to the + node pool. + + If the strategy is ROLLING, use max_surge and max_unavailable to + control the level of parallelism and the level of disruption caused + by upgrade. + + 1. maxSurge controls the number of additional nodes that can be + added to the node pool temporarily for the time of the upgrade to + increase the number of available nodes. + 2. maxUnavailable controls the number of nodes that can be + simultaneously unavailable. + 3. (maxUnavailable + maxSurge) determines the level of parallelism + (how many nodes are being upgraded at the same time). + + If the strategy is BLUE_GREEN, use blue_green_settings to configure + the blue-green upgrade related settings. + + 1. standard_rollout_policy is the default policy. The policy is used + to control the way blue pool gets drained. The draining is + executed in the batch mode. The batch size could be specified as + either percentage of the node pool size or the number of nodes. + batch_soak_duration is the soak time after each batch gets + drained. + 2. node_pool_soak_duration is the soak time after all blue nodes are + drained. After this period, the blue pool nodes will be deleted. Attributes: max_surge (int): @@ -4013,6 +4371,14 @@ class UpgradeSettings(proto.Message): simultaneously unavailable during the upgrade process. A node is considered available if its status is Ready. + strategy (google.cloud.container_v1.types.NodePoolUpdateStrategy): + Update strategy of the node pool. + + This field is a member of `oneof`_ ``_strategy``. + blue_green_settings (google.cloud.container_v1.types.BlueGreenSettings): + Settings for blue-green upgrade strategy. + + This field is a member of `oneof`_ ``_blue_green_settings``. """ max_surge = proto.Field( @@ -4023,6 +4389,92 @@ class UpgradeSettings(proto.Message): proto.INT32, number=2, ) + strategy = proto.Field( + proto.ENUM, + number=3, + optional=True, + enum="NodePoolUpdateStrategy", + ) + blue_green_settings = proto.Field( + proto.MESSAGE, + number=4, + optional=True, + message="BlueGreenSettings", + ) + + class UpdateInfo(proto.Message): + r"""UpdateInfo contains resource (instance groups, etc), status + and other intermediate information relevant to a node pool + upgrade. + + Attributes: + blue_green_info (google.cloud.container_v1.types.NodePool.UpdateInfo.BlueGreenInfo): + Information of a blue-green upgrade. + """ + + class BlueGreenInfo(proto.Message): + r"""Information relevant to blue-green upgrade. + + Attributes: + phase (google.cloud.container_v1.types.NodePool.UpdateInfo.BlueGreenInfo.Phase): + Current blue-green upgrade phase. + blue_instance_group_urls (Sequence[str]): + The resource URLs of the [managed instance groups] + (/compute/docs/instance-groups/creating-groups-of-managed-instances) + associated with blue pool. + green_instance_group_urls (Sequence[str]): + The resource URLs of the [managed instance groups] + (/compute/docs/instance-groups/creating-groups-of-managed-instances) + associated with green pool. + blue_pool_deletion_start_time (str): + Time to start deleting blue pool to complete blue-green + upgrade, in + `RFC3339 `__ text + format. + green_pool_version (str): + Version of green pool. + """ + + class Phase(proto.Enum): + r"""Phase represents the different stages blue-green upgrade is + running in. + """ + PHASE_UNSPECIFIED = 0 + UPDATE_STARTED = 1 + CREATING_GREEN_POOL = 2 + CORDONING_BLUE_POOL = 3 + DRAINING_BLUE_POOL = 4 + NODE_POOL_SOAKING = 5 + DELETING_BLUE_POOL = 6 + ROLLBACK_STARTED = 7 + + phase = proto.Field( + proto.ENUM, + number=1, + enum="NodePool.UpdateInfo.BlueGreenInfo.Phase", + ) + blue_instance_group_urls = proto.RepeatedField( + proto.STRING, + number=2, + ) + green_instance_group_urls = proto.RepeatedField( + proto.STRING, + number=3, + ) + blue_pool_deletion_start_time = proto.Field( + proto.STRING, + number=4, + ) + green_pool_version = proto.Field( + proto.STRING, + number=5, + ) + + blue_green_info = proto.Field( + proto.MESSAGE, + number=1, + message="NodePool.UpdateInfo.BlueGreenInfo", + ) name = proto.Field( proto.STRING, @@ -4096,6 +4548,11 @@ class UpgradeSettings(proto.Message): number=107, message=UpgradeSettings, ) + update_info = proto.Field( + proto.MESSAGE, + number=109, + message=UpdateInfo, + ) class NodeManagement(proto.Message): @@ -4392,7 +4849,7 @@ class SetNodePoolManagementRequest(proto.Message): project_id (str): Deprecated. The Google Developers Console `project ID or project - number `__. + number `__. This field has been deprecated and replaced by the name field. zone (str): @@ -4451,7 +4908,7 @@ class SetNodePoolSizeRequest(proto.Message): project_id (str): Deprecated. The Google Developers Console `project ID or project - number `__. + number `__. This field has been deprecated and replaced by the name field. zone (str): @@ -4502,6 +4959,23 @@ class SetNodePoolSizeRequest(proto.Message): ) +class CompleteNodePoolUpgradeRequest(proto.Message): + r"""CompleteNodePoolUpgradeRequest sets the name of target node + pool to complete upgrade. + + Attributes: + name (str): + The name (project, location, cluster, node pool id) of the + node pool to complete upgrade. Specified in the format + 'projects/*/locations/*/clusters/*/nodePools/*'. + """ + + name = proto.Field( + proto.STRING, + number=1, + ) + + class RollbackNodePoolUpgradeRequest(proto.Message): r"""RollbackNodePoolUpgradeRequest rollbacks the previously Aborted or Failed NodePool upgrade. This will be an no-op if the @@ -4511,7 +4985,7 @@ class RollbackNodePoolUpgradeRequest(proto.Message): project_id (str): Deprecated. The Google Developers Console `project ID or project - number `__. + number `__. This field has been deprecated and replaced by the name field. zone (str): @@ -4531,6 +5005,9 @@ class RollbackNodePoolUpgradeRequest(proto.Message): The name (project, location, cluster, node pool id) of the node poll to rollback upgrade. Specified in the format ``projects/*/locations/*/clusters/*/nodePools/*``. + respect_pdb (bool): + Option for rollback to ignore the + PodDisruptionBudget. Default value is false. """ project_id = proto.Field( @@ -4553,6 +5030,10 @@ class RollbackNodePoolUpgradeRequest(proto.Message): proto.STRING, number=6, ) + respect_pdb = proto.Field( + proto.BOOL, + number=7, + ) class ListNodePoolsResponse(proto.Message): @@ -4643,15 +5124,17 @@ class AutoprovisioningNodePoolDefaults(proto.Message): Specifies the node management options for NAP created node-pools. min_cpu_platform (str): - Minimum CPU platform to be used for NAP created node pools. - The instance may be scheduled on the specified or newer CPU - platform. Applicable values are the friendly names of CPU - platforms, such as minCpuPlatform: Intel Haswell or - minCpuPlatform: Intel Sandy Bridge. For more information, - read `how to specify min CPU + Deprecated. Minimum CPU platform to be used for NAP created + node pools. The instance may be scheduled on the specified + or newer CPU platform. Applicable values are the friendly + names of CPU platforms, such as minCpuPlatform: Intel + Haswell or minCpuPlatform: Intel Sandy Bridge. For more + information, read `how to specify min CPU platform `__ - To unset the min cpu platform field pass "automatic" as - field value. + This field is deprecated, min_cpu_platform should be + specified using cloud.google.com/requested-min-cpu-platform + label selector on the pod. To unset the min cpu platform + field pass "automatic" as field value. disk_size_gb (int): Size of the disk attached to each node, specified in GB. The smallest allowed disk size @@ -4769,8 +5252,29 @@ class NodePoolAutoscaling(proto.Message): scale up the cluster. autoprovisioned (bool): Can this node pool be deleted automatically. + location_policy (google.cloud.container_v1.types.NodePoolAutoscaling.LocationPolicy): + Location policy used when scaling up a + nodepool. + total_min_node_count (int): + Minimum number of nodes in the node pool. Must be greater + than 1 less than total_max_node_count. The + total_*_node_count fields are mutually exclusive with the + \*_node_count fields. + total_max_node_count (int): + Maximum number of nodes in the node pool. Must be greater + than total_min_node_count. There has to be enough quota to + scale up the cluster. The total_*_node_count fields are + mutually exclusive with the \*_node_count fields. """ + class LocationPolicy(proto.Enum): + r"""Location policy specifies how zones are picked when scaling + up the nodepool. + """ + LOCATION_POLICY_UNSPECIFIED = 0 + BALANCED = 1 + ANY = 2 + enabled = proto.Field( proto.BOOL, number=1, @@ -4787,6 +5291,19 @@ class NodePoolAutoscaling(proto.Message): proto.BOOL, number=4, ) + location_policy = proto.Field( + proto.ENUM, + number=5, + enum=LocationPolicy, + ) + total_min_node_count = proto.Field( + proto.INT32, + number=6, + ) + total_max_node_count = proto.Field( + proto.INT32, + number=7, + ) class SetLabelsRequest(proto.Message): @@ -4798,7 +5315,7 @@ class SetLabelsRequest(proto.Message): project_id (str): Deprecated. The Google Developers Console `project ID or project - number `__. + number `__. This field has been deprecated and replaced by the name field. zone (str): @@ -4821,7 +5338,7 @@ class SetLabelsRequest(proto.Message): changing labels. Make a ``get()`` request to the resource to get the latest fingerprint. name (str): - The name (project, location, cluster id) of the cluster to + The name (project, location, cluster name) of the cluster to set labels. Specified in the format ``projects/*/locations/*/clusters/*``. """ @@ -4861,7 +5378,7 @@ class SetLegacyAbacRequest(proto.Message): project_id (str): Deprecated. The Google Developers Console `project ID or project - number `__. + number `__. This field has been deprecated and replaced by the name field. zone (str): @@ -4877,7 +5394,7 @@ class SetLegacyAbacRequest(proto.Message): Required. Whether ABAC authorization will be enabled in the cluster. name (str): - The name (project, location, cluster id) of the cluster to + The name (project, location, cluster name) of the cluster to set legacy abac. Specified in the format ``projects/*/locations/*/clusters/*``. """ @@ -4913,7 +5430,7 @@ class StartIPRotationRequest(proto.Message): project_id (str): Deprecated. The Google Developers Console `project ID or project - number `__. + number `__. This field has been deprecated and replaced by the name field. zone (str): @@ -4926,7 +5443,7 @@ class StartIPRotationRequest(proto.Message): This field has been deprecated and replaced by the name field. name (str): - The name (project, location, cluster id) of the cluster to + The name (project, location, cluster name) of the cluster to start IP rotation. Specified in the format ``projects/*/locations/*/clusters/*``. rotate_credentials (bool): @@ -4964,7 +5481,7 @@ class CompleteIPRotationRequest(proto.Message): project_id (str): Deprecated. The Google Developers Console `project ID or project - number `__. + number `__. This field has been deprecated and replaced by the name field. zone (str): @@ -4977,7 +5494,7 @@ class CompleteIPRotationRequest(proto.Message): This field has been deprecated and replaced by the name field. name (str): - The name (project, location, cluster id) of the cluster to + The name (project, location, cluster name) of the cluster to complete IP rotation. Specified in the format ``projects/*/locations/*/clusters/*``. """ @@ -5015,6 +5532,10 @@ class AcceleratorConfig(proto.Message): Size of partitions to create on the GPU. Valid values are described in the NVIDIA `mig user guide `__. + gpu_sharing_config (google.cloud.container_v1.types.GPUSharingConfig): + The configuration for GPU sharing options. + + This field is a member of `oneof`_ ``_gpu_sharing_config``. """ accelerator_count = proto.Field( @@ -5029,6 +5550,44 @@ class AcceleratorConfig(proto.Message): proto.STRING, number=3, ) + gpu_sharing_config = proto.Field( + proto.MESSAGE, + number=5, + optional=True, + message="GPUSharingConfig", + ) + + +class GPUSharingConfig(proto.Message): + r"""GPUSharingConfig represents the GPU sharing configuration for + Hardware Accelerators. + + Attributes: + max_shared_clients_per_gpu (int): + The max number of containers that can share a + physical GPU. + gpu_sharing_strategy (google.cloud.container_v1.types.GPUSharingConfig.GPUSharingStrategy): + The type of GPU sharing strategy to enable on + the GPU node. + + This field is a member of `oneof`_ ``_gpu_sharing_strategy``. + """ + + class GPUSharingStrategy(proto.Enum): + r"""The type of GPU sharing strategy currently provided.""" + GPU_SHARING_STRATEGY_UNSPECIFIED = 0 + TIME_SHARING = 1 + + max_shared_clients_per_gpu = proto.Field( + proto.INT64, + number=1, + ) + gpu_sharing_strategy = proto.Field( + proto.ENUM, + number=2, + optional=True, + enum=GPUSharingStrategy, + ) class WorkloadMetadataConfig(proto.Message): @@ -5064,7 +5623,7 @@ class SetNetworkPolicyRequest(proto.Message): project_id (str): Deprecated. The Google Developers Console `project ID or project - number `__. + number `__. This field has been deprecated and replaced by the name field. zone (str): @@ -5080,7 +5639,7 @@ class SetNetworkPolicyRequest(proto.Message): Required. Configuration options for the NetworkPolicy feature. name (str): - The name (project, location, cluster id) of the cluster to + The name (project, location, cluster name) of the cluster to set networking policy. Specified in the format ``projects/*/locations/*/clusters/*``. """ @@ -5116,7 +5675,7 @@ class SetMaintenancePolicyRequest(proto.Message): project_id (str): Required. The Google Developers Console `project ID or project - number `__. + number `__. zone (str): Required. The name of the Google Compute Engine `zone `__ @@ -5128,7 +5687,7 @@ class SetMaintenancePolicyRequest(proto.Message): for the cluster. An empty field clears the existing maintenance policy. name (str): - The name (project, location, cluster id) of the cluster to + The name (project, location, cluster name) of the cluster to set maintenance policy. Specified in the format ``projects/*/locations/*/clusters/*``. """ @@ -5379,8 +5938,8 @@ class GetJSONWebKeysRequest(proto.Message): Attributes: parent (str): - The cluster (project, location, cluster id) to get keys for. - Specified in the format + The cluster (project, location, cluster name) to get keys + for. Specified in the format ``projects/*/locations/*/clusters/*``. """ @@ -5603,6 +6162,23 @@ class WorkloadIdentityConfig(proto.Message): ) +class IdentityServiceConfig(proto.Message): + r"""IdentityServiceConfig is configuration for Identity Service + which allows customers to use external identity providers with + the K8S API + + Attributes: + enabled (bool): + Whether to enable the Identity Service + component + """ + + enabled = proto.Field( + proto.BOOL, + number=1, + ) + + class MeshCertificates(proto.Message): r"""Configuration for issuance of mTLS keys and certificates to Kubernetes pods. @@ -6025,8 +6601,8 @@ class ConfidentialNodes(proto.Message): Attributes: enabled (bool): - Whether Confidential Nodes feature is enabled - for all nodes in this cluster. + Whether Confidential Nodes feature is + enabled. """ enabled = proto.Field( @@ -6267,6 +6843,9 @@ class MonitoringConfig(proto.Message): Attributes: component_config (google.cloud.container_v1.types.MonitoringComponentConfig): Monitoring components configuration + managed_prometheus_config (google.cloud.container_v1.types.ManagedPrometheusConfig): + Enable Google Cloud Managed Service for + Prometheus in the cluster. """ component_config = proto.Field( @@ -6274,6 +6853,11 @@ class MonitoringConfig(proto.Message): number=1, message="MonitoringComponentConfig", ) + managed_prometheus_config = proto.Field( + proto.MESSAGE, + number=2, + message="ManagedPrometheusConfig", + ) class MonitoringComponentConfig(proto.Message): @@ -6290,6 +6874,9 @@ class Component(proto.Enum): r"""GKE components exposing metrics""" COMPONENT_UNSPECIFIED = 0 SYSTEM_COMPONENTS = 1 + APISERVER = 3 + SCHEDULER = 4 + CONTROLLER_MANAGER = 5 enable_components = proto.RepeatedField( proto.ENUM, @@ -6298,4 +6885,19 @@ class Component(proto.Enum): ) +class ManagedPrometheusConfig(proto.Message): + r"""ManagedPrometheusConfig defines the configuration for + Google Cloud Managed Service for Prometheus. + + Attributes: + enabled (bool): + Enable Managed Collection. + """ + + enabled = proto.Field( + proto.BOOL, + number=1, + ) + + __all__ = tuple(sorted(__protobuf__.manifest)) diff --git a/packages/google-cloud-container/google/cloud/container_v1beta1/__init__.py b/packages/google-cloud-container/google/cloud/container_v1beta1/__init__.py index fd68ddf737d6..97b62fda3abf 100644 --- a/packages/google-cloud-container/google/cloud/container_v1beta1/__init__.py +++ b/packages/google-cloud-container/google/cloud/container_v1beta1/__init__.py @@ -24,6 +24,7 @@ AutoprovisioningNodePoolDefaults, AutoUpgradeOptions, BinaryAuthorization, + BlueGreenSettings, CancelOperationRequest, ClientCertificateConfig, CloudRunConfig, @@ -32,8 +33,10 @@ ClusterTelemetry, ClusterUpdate, CompleteIPRotationRequest, + CompleteNodePoolUpgradeRequest, ConfidentialNodes, ConfigConnectorConfig, + CostManagementConfig, CreateClusterRequest, CreateNodePoolRequest, DailyMaintenanceWindow, @@ -57,6 +60,7 @@ GetOperationRequest, GetServerConfigRequest, GkeBackupAgentConfig, + GPUSharingConfig, HorizontalPodAutoscaling, HttpLoadBalancing, IdentityServiceConfig, @@ -104,8 +108,10 @@ NodeManagement, NodeNetworkConfig, NodePool, + NodePoolAutoConfig, NodePoolAutoscaling, NodePoolDefaults, + NodePoolUpdateStrategy, NodeTaint, NodeTaints, NotificationConfig, @@ -115,6 +121,7 @@ PrivateClusterConfig, PrivateClusterMasterGlobalAccessConfig, PrivateIPv6GoogleAccess, + ProtectConfig, RecurringTimeWindow, ReleaseChannel, ReservationAffinity, @@ -154,7 +161,9 @@ VerticalPodAutoscaling, VirtualNIC, WindowsVersions, + WorkloadALTSConfig, WorkloadCertificates, + WorkloadConfig, WorkloadIdentityConfig, WorkloadMetadataConfig, ) @@ -169,6 +178,7 @@ "Autopilot", "AutoprovisioningNodePoolDefaults", "BinaryAuthorization", + "BlueGreenSettings", "CancelOperationRequest", "ClientCertificateConfig", "CloudRunConfig", @@ -178,8 +188,10 @@ "ClusterTelemetry", "ClusterUpdate", "CompleteIPRotationRequest", + "CompleteNodePoolUpgradeRequest", "ConfidentialNodes", "ConfigConnectorConfig", + "CostManagementConfig", "CreateClusterRequest", "CreateNodePoolRequest", "DNSConfig", @@ -191,6 +203,7 @@ "DeleteNodePoolRequest", "DnsCacheConfig", "EphemeralStorageConfig", + "GPUSharingConfig", "GcePersistentDiskCsiDriverConfig", "GcfsConfig", "GcpFilestoreCsiDriverConfig", @@ -250,8 +263,10 @@ "NodeManagement", "NodeNetworkConfig", "NodePool", + "NodePoolAutoConfig", "NodePoolAutoscaling", "NodePoolDefaults", + "NodePoolUpdateStrategy", "NodeTaint", "NodeTaints", "NotificationConfig", @@ -261,6 +276,7 @@ "PrivateClusterConfig", "PrivateClusterMasterGlobalAccessConfig", "PrivateIPv6GoogleAccess", + "ProtectConfig", "RecurringTimeWindow", "ReleaseChannel", "ReservationAffinity", @@ -300,7 +316,9 @@ "VerticalPodAutoscaling", "VirtualNIC", "WindowsVersions", + "WorkloadALTSConfig", "WorkloadCertificates", + "WorkloadConfig", "WorkloadIdentityConfig", "WorkloadMetadataConfig", ) diff --git a/packages/google-cloud-container/google/cloud/container_v1beta1/gapic_metadata.json b/packages/google-cloud-container/google/cloud/container_v1beta1/gapic_metadata.json index b03644e05330..4e4299615f7c 100644 --- a/packages/google-cloud-container/google/cloud/container_v1beta1/gapic_metadata.json +++ b/packages/google-cloud-container/google/cloud/container_v1beta1/gapic_metadata.json @@ -20,6 +20,11 @@ "complete_ip_rotation" ] }, + "CompleteNodePoolUpgrade": { + "methods": [ + "complete_node_pool_upgrade" + ] + }, "CreateCluster": { "methods": [ "create_cluster" @@ -190,6 +195,11 @@ "complete_ip_rotation" ] }, + "CompleteNodePoolUpgrade": { + "methods": [ + "complete_node_pool_upgrade" + ] + }, "CreateCluster": { "methods": [ "create_cluster" diff --git a/packages/google-cloud-container/google/cloud/container_v1beta1/services/cluster_manager/async_client.py b/packages/google-cloud-container/google/cloud/container_v1beta1/services/cluster_manager/async_client.py index 212e56e4d789..91fbb176596f 100644 --- a/packages/google-cloud-container/google/cloud/container_v1beta1/services/cluster_manager/async_client.py +++ b/packages/google-cloud-container/google/cloud/container_v1beta1/services/cluster_manager/async_client.py @@ -245,7 +245,7 @@ async def sample_list_clusters(): project_id (:class:`str`): Required. Deprecated. The Google Developers Console `project ID or project - number `__. + number `__. This field has been deprecated and replaced by the parent field. @@ -370,7 +370,7 @@ async def sample_get_cluster(): project_id (:class:`str`): Required. Deprecated. The Google Developers Console `project ID or project - number `__. + number `__. This field has been deprecated and replaced by the name field. @@ -514,7 +514,7 @@ async def sample_create_cluster(): project_id (:class:`str`): Required. Deprecated. The Google Developers Console `project ID or project - number `__. + number `__. This field has been deprecated and replaced by the parent field. @@ -640,7 +640,7 @@ async def sample_update_cluster(): project_id (:class:`str`): Required. Deprecated. The Google Developers Console `project ID or project - number `__. + number `__. This field has been deprecated and replaced by the name field. @@ -938,7 +938,7 @@ async def sample_set_logging_service(): project_id (:class:`str`): Required. Deprecated. The Google Developers Console `project ID or project - number `__. + number `__. This field has been deprecated and replaced by the name field. @@ -1088,7 +1088,7 @@ async def sample_set_monitoring_service(): project_id (:class:`str`): Required. Deprecated. The Google Developers Console `project ID or project - number `__. + number `__. This field has been deprecated and replaced by the name field. @@ -1239,7 +1239,7 @@ async def sample_set_addons_config(): project_id (:class:`str`): Required. Deprecated. The Google Developers Console `project ID or project - number `__. + number `__. This field has been deprecated and replaced by the name field. @@ -1380,7 +1380,7 @@ async def sample_set_locations(): project_id (:class:`str`): Required. Deprecated. The Google Developers Console `project ID or project - number `__. + number `__. This field has been deprecated and replaced by the name field. @@ -1529,7 +1529,7 @@ async def sample_update_master(): project_id (:class:`str`): Required. Deprecated. The Google Developers Console `project ID or project - number `__. + number `__. This field has been deprecated and replaced by the name field. @@ -1767,7 +1767,7 @@ async def sample_delete_cluster(): project_id (:class:`str`): Required. Deprecated. The Google Developers Console `project ID or project - number `__. + number `__. This field has been deprecated and replaced by the name field. @@ -1903,7 +1903,7 @@ async def sample_list_operations(): project_id (:class:`str`): Required. Deprecated. The Google Developers Console `project ID or project - number `__. + number `__. This field has been deprecated and replaced by the parent field. @@ -2028,7 +2028,7 @@ async def sample_get_operation(): project_id (:class:`str`): Required. Deprecated. The Google Developers Console `project ID or project - number `__. + number `__. This field has been deprecated and replaced by the name field. @@ -2161,7 +2161,7 @@ async def sample_cancel_operation(): project_id (:class:`str`): Required. Deprecated. The Google Developers Console `project ID or project - number `__. + number `__. This field has been deprecated and replaced by the name field. @@ -2275,7 +2275,7 @@ async def sample_get_server_config(): project_id (:class:`str`): Required. Deprecated. The Google Developers Console `project ID or project - number `__. + number `__. This field has been deprecated and replaced by the name field. @@ -2399,7 +2399,7 @@ async def sample_list_node_pools(): project_id (:class:`str`): Required. Deprecated. The Google Developers Console `project ID or project - number `__. + number `__. This field has been deprecated and replaced by the parent field. @@ -2614,7 +2614,7 @@ async def sample_get_node_pool(): project_id (:class:`str`): Required. Deprecated. The Google Developers Console `project ID or project - number `__. + number `__. This field has been deprecated and replaced by the name field. @@ -2801,7 +2801,7 @@ async def sample_create_node_pool(): project_id (:class:`str`): Required. Deprecated. The Google Developers Console `project ID or project - number `__. + number `__. This field has been deprecated and replaced by the parent field. @@ -2936,7 +2936,7 @@ async def sample_delete_node_pool(): project_id (:class:`str`): Required. Deprecated. The Google Developers Console `project ID or project - number `__. + number `__. This field has been deprecated and replaced by the name field. @@ -3042,6 +3042,67 @@ async def sample_delete_node_pool(): # Done; return the response. return response + async def complete_node_pool_upgrade( + self, + request: Union[cluster_service.CompleteNodePoolUpgradeRequest, dict] = None, + *, + retry: OptionalRetry = gapic_v1.method.DEFAULT, + timeout: float = None, + metadata: Sequence[Tuple[str, str]] = (), + ) -> None: + r"""CompleteNodePoolUpgrade will signal an on-going node + pool upgrade to complete. + + .. code-block:: python + + from google.cloud import container_v1beta1 + + async def sample_complete_node_pool_upgrade(): + # Create a client + client = container_v1beta1.ClusterManagerAsyncClient() + + # Initialize request argument(s) + request = container_v1beta1.CompleteNodePoolUpgradeRequest( + ) + + # Make the request + await client.complete_node_pool_upgrade(request=request) + + Args: + request (Union[google.cloud.container_v1beta1.types.CompleteNodePoolUpgradeRequest, dict]): + The request object. CompleteNodePoolUpgradeRequest sets + the name of target node pool to complete upgrade. + retry (google.api_core.retry.Retry): Designation of what errors, if any, + should be retried. + timeout (float): The timeout for this request. + metadata (Sequence[Tuple[str, str]]): Strings which should be + sent along with the request as metadata. + """ + # Create or coerce a protobuf request object. + request = cluster_service.CompleteNodePoolUpgradeRequest(request) + + # Wrap the RPC method; this adds retry and timeout information, + # and friendly error handling. + rpc = gapic_v1.method_async.wrap_method( + self._client._transport.complete_node_pool_upgrade, + default_timeout=None, + client_info=DEFAULT_CLIENT_INFO, + ) + + # Certain fields should be provided within the metadata header; + # add these here. + metadata = tuple(metadata) + ( + gapic_v1.routing_header.to_grpc_metadata((("name", request.name),)), + ) + + # Send the request. + await rpc( + request, + retry=retry, + timeout=timeout, + metadata=metadata, + ) + async def rollback_node_pool_upgrade( self, request: Union[cluster_service.RollbackNodePoolUpgradeRequest, dict] = None, @@ -3089,7 +3150,7 @@ async def sample_rollback_node_pool_upgrade(): project_id (:class:`str`): Required. Deprecated. The Google Developers Console `project ID or project - number `__. + number `__. This field has been deprecated and replaced by the name field. @@ -3230,7 +3291,7 @@ async def sample_set_node_pool_management(): project_id (:class:`str`): Required. Deprecated. The Google Developers Console `project ID or project - number `__. + number `__. This field has been deprecated and replaced by the name field. @@ -3384,7 +3445,7 @@ async def sample_set_labels(): project_id (:class:`str`): Required. Deprecated. The Google Developers Console `project ID or project - number `__. + number `__. This field has been deprecated and replaced by the name field. @@ -3540,7 +3601,7 @@ async def sample_set_legacy_abac(): project_id (:class:`str`): Required. Deprecated. The Google Developers Console `project ID or project - number `__. + number `__. This field has been deprecated and replaced by the name field. @@ -3677,7 +3738,7 @@ async def sample_start_ip_rotation(): project_id (:class:`str`): Required. Deprecated. The Google Developers Console `project ID or project - number `__. + number `__. This field has been deprecated and replaced by the name field. @@ -3803,7 +3864,7 @@ async def sample_complete_ip_rotation(): project_id (:class:`str`): Required. Deprecated. The Google Developers Console `project ID or project - number `__. + number `__. This field has been deprecated and replaced by the name field. @@ -4012,7 +4073,7 @@ async def sample_set_network_policy(): project_id (:class:`str`): Required. Deprecated. The Google Developers Console `project ID or project - number `__. + number `__. This field has been deprecated and replaced by the name field. @@ -4148,7 +4209,7 @@ async def sample_set_maintenance_policy(): project_id (:class:`str`): Required. The Google Developers Console `project ID or project - number `__. + number `__. This corresponds to the ``project_id`` field on the ``request`` instance; if ``request`` is provided, this diff --git a/packages/google-cloud-container/google/cloud/container_v1beta1/services/cluster_manager/client.py b/packages/google-cloud-container/google/cloud/container_v1beta1/services/cluster_manager/client.py index 50360b33eb9c..811d7c853d1e 100644 --- a/packages/google-cloud-container/google/cloud/container_v1beta1/services/cluster_manager/client.py +++ b/packages/google-cloud-container/google/cloud/container_v1beta1/services/cluster_manager/client.py @@ -423,6 +423,7 @@ def __init__( quota_project_id=client_options.quota_project_id, client_info=client_info, always_use_jwt_access=True, + api_audience=client_options.api_audience, ) def list_clusters( @@ -464,7 +465,7 @@ def sample_list_clusters(): project_id (str): Required. Deprecated. The Google Developers Console `project ID or project - number `__. + number `__. This field has been deprecated and replaced by the parent field. @@ -579,7 +580,7 @@ def sample_get_cluster(): project_id (str): Required. Deprecated. The Google Developers Console `project ID or project - number `__. + number `__. This field has been deprecated and replaced by the name field. @@ -713,7 +714,7 @@ def sample_create_cluster(): project_id (str): Required. Deprecated. The Google Developers Console `project ID or project - number `__. + number `__. This field has been deprecated and replaced by the parent field. @@ -839,7 +840,7 @@ def sample_update_cluster(): project_id (str): Required. Deprecated. The Google Developers Console `project ID or project - number `__. + number `__. This field has been deprecated and replaced by the name field. @@ -1141,7 +1142,7 @@ def sample_set_logging_service(): project_id (str): Required. Deprecated. The Google Developers Console `project ID or project - number `__. + number `__. This field has been deprecated and replaced by the name field. @@ -1291,7 +1292,7 @@ def sample_set_monitoring_service(): project_id (str): Required. Deprecated. The Google Developers Console `project ID or project - number `__. + number `__. This field has been deprecated and replaced by the name field. @@ -1442,7 +1443,7 @@ def sample_set_addons_config(): project_id (str): Required. Deprecated. The Google Developers Console `project ID or project - number `__. + number `__. This field has been deprecated and replaced by the name field. @@ -1583,7 +1584,7 @@ def sample_set_locations(): project_id (str): Required. Deprecated. The Google Developers Console `project ID or project - number `__. + number `__. This field has been deprecated and replaced by the name field. @@ -1732,7 +1733,7 @@ def sample_update_master(): project_id (str): Required. Deprecated. The Google Developers Console `project ID or project - number `__. + number `__. This field has been deprecated and replaced by the name field. @@ -1971,7 +1972,7 @@ def sample_delete_cluster(): project_id (str): Required. Deprecated. The Google Developers Console `project ID or project - number `__. + number `__. This field has been deprecated and replaced by the name field. @@ -2097,7 +2098,7 @@ def sample_list_operations(): project_id (str): Required. Deprecated. The Google Developers Console `project ID or project - number `__. + number `__. This field has been deprecated and replaced by the parent field. @@ -2212,7 +2213,7 @@ def sample_get_operation(): project_id (str): Required. Deprecated. The Google Developers Console `project ID or project - number `__. + number `__. This field has been deprecated and replaced by the name field. @@ -2335,7 +2336,7 @@ def sample_cancel_operation(): project_id (str): Required. Deprecated. The Google Developers Console `project ID or project - number `__. + number `__. This field has been deprecated and replaced by the name field. @@ -2449,7 +2450,7 @@ def sample_get_server_config(): project_id (str): Required. Deprecated. The Google Developers Console `project ID or project - number `__. + number `__. This field has been deprecated and replaced by the name field. @@ -2563,7 +2564,7 @@ def sample_list_node_pools(): project_id (str): Required. Deprecated. The Google Developers Console `project ID or project - number `__. + number `__. This field has been deprecated and replaced by the parent field. @@ -2769,7 +2770,7 @@ def sample_get_node_pool(): project_id (str): Required. Deprecated. The Google Developers Console `project ID or project - number `__. + number `__. This field has been deprecated and replaced by the name field. @@ -2946,7 +2947,7 @@ def sample_create_node_pool(): project_id (str): Required. Deprecated. The Google Developers Console `project ID or project - number `__. + number `__. This field has been deprecated and replaced by the parent field. @@ -3081,7 +3082,7 @@ def sample_delete_node_pool(): project_id (str): Required. Deprecated. The Google Developers Console `project ID or project - number `__. + number `__. This field has been deprecated and replaced by the name field. @@ -3177,6 +3178,70 @@ def sample_delete_node_pool(): # Done; return the response. return response + def complete_node_pool_upgrade( + self, + request: Union[cluster_service.CompleteNodePoolUpgradeRequest, dict] = None, + *, + retry: OptionalRetry = gapic_v1.method.DEFAULT, + timeout: float = None, + metadata: Sequence[Tuple[str, str]] = (), + ) -> None: + r"""CompleteNodePoolUpgrade will signal an on-going node + pool upgrade to complete. + + .. code-block:: python + + from google.cloud import container_v1beta1 + + def sample_complete_node_pool_upgrade(): + # Create a client + client = container_v1beta1.ClusterManagerClient() + + # Initialize request argument(s) + request = container_v1beta1.CompleteNodePoolUpgradeRequest( + ) + + # Make the request + client.complete_node_pool_upgrade(request=request) + + Args: + request (Union[google.cloud.container_v1beta1.types.CompleteNodePoolUpgradeRequest, dict]): + The request object. CompleteNodePoolUpgradeRequest sets + the name of target node pool to complete upgrade. + retry (google.api_core.retry.Retry): Designation of what errors, if any, + should be retried. + timeout (float): The timeout for this request. + metadata (Sequence[Tuple[str, str]]): Strings which should be + sent along with the request as metadata. + """ + # Create or coerce a protobuf request object. + # Minor optimization to avoid making a copy if the user passes + # in a cluster_service.CompleteNodePoolUpgradeRequest. + # There's no risk of modifying the input as we've already verified + # there are no flattened fields. + if not isinstance(request, cluster_service.CompleteNodePoolUpgradeRequest): + request = cluster_service.CompleteNodePoolUpgradeRequest(request) + + # Wrap the RPC method; this adds retry and timeout information, + # and friendly error handling. + rpc = self._transport._wrapped_methods[ + self._transport.complete_node_pool_upgrade + ] + + # Certain fields should be provided within the metadata header; + # add these here. + metadata = tuple(metadata) + ( + gapic_v1.routing_header.to_grpc_metadata((("name", request.name),)), + ) + + # Send the request. + rpc( + request, + retry=retry, + timeout=timeout, + metadata=metadata, + ) + def rollback_node_pool_upgrade( self, request: Union[cluster_service.RollbackNodePoolUpgradeRequest, dict] = None, @@ -3224,7 +3289,7 @@ def sample_rollback_node_pool_upgrade(): project_id (str): Required. Deprecated. The Google Developers Console `project ID or project - number `__. + number `__. This field has been deprecated and replaced by the name field. @@ -3367,7 +3432,7 @@ def sample_set_node_pool_management(): project_id (str): Required. Deprecated. The Google Developers Console `project ID or project - number `__. + number `__. This field has been deprecated and replaced by the name field. @@ -3521,7 +3586,7 @@ def sample_set_labels(): project_id (str): Required. Deprecated. The Google Developers Console `project ID or project - number `__. + number `__. This field has been deprecated and replaced by the name field. @@ -3676,7 +3741,7 @@ def sample_set_legacy_abac(): project_id (str): Required. Deprecated. The Google Developers Console `project ID or project - number `__. + number `__. This field has been deprecated and replaced by the name field. @@ -3813,7 +3878,7 @@ def sample_start_ip_rotation(): project_id (str): Required. Deprecated. The Google Developers Console `project ID or project - number `__. + number `__. This field has been deprecated and replaced by the name field. @@ -3939,7 +4004,7 @@ def sample_complete_ip_rotation(): project_id (str): Required. Deprecated. The Google Developers Console `project ID or project - number `__. + number `__. This field has been deprecated and replaced by the name field. @@ -4149,7 +4214,7 @@ def sample_set_network_policy(): project_id (str): Required. Deprecated. The Google Developers Console `project ID or project - number `__. + number `__. This field has been deprecated and replaced by the name field. @@ -4285,7 +4350,7 @@ def sample_set_maintenance_policy(): project_id (str): Required. The Google Developers Console `project ID or project - number `__. + number `__. This corresponds to the ``project_id`` field on the ``request`` instance; if ``request`` is provided, this diff --git a/packages/google-cloud-container/google/cloud/container_v1beta1/services/cluster_manager/transports/base.py b/packages/google-cloud-container/google/cloud/container_v1beta1/services/cluster_manager/transports/base.py index 2d54204dd86a..1cc5de64171d 100644 --- a/packages/google-cloud-container/google/cloud/container_v1beta1/services/cluster_manager/transports/base.py +++ b/packages/google-cloud-container/google/cloud/container_v1beta1/services/cluster_manager/transports/base.py @@ -55,6 +55,7 @@ def __init__( quota_project_id: Optional[str] = None, client_info: gapic_v1.client_info.ClientInfo = DEFAULT_CLIENT_INFO, always_use_jwt_access: Optional[bool] = False, + api_audience: Optional[str] = None, **kwargs, ) -> None: """Instantiate the transport. @@ -82,11 +83,6 @@ def __init__( be used for service account credentials. """ - # Save the hostname. Default to port 443 (HTTPS) if none is specified. - if ":" not in host: - host += ":443" - self._host = host - scopes_kwargs = {"scopes": scopes, "default_scopes": self.AUTH_SCOPES} # Save the scopes. @@ -107,6 +103,11 @@ def __init__( credentials, _ = google.auth.default( **scopes_kwargs, quota_project_id=quota_project_id ) + # Don't apply audience if the credentials file passed from user. + if hasattr(credentials, "with_gdch_audience"): + credentials = credentials.with_gdch_audience( + api_audience if api_audience else host + ) # If the credentials are service account credentials, then always try to use self signed JWT. if ( @@ -119,6 +120,11 @@ def __init__( # Save the credentials. self._credentials = credentials + # Save the hostname. Default to port 443 (HTTPS) if none is specified. + if ":" not in host: + host += ":443" + self._host = host + def _prep_wrapped_messages(self, client_info): # Precompute the wrapped methods. self._wrapped_methods = { @@ -322,6 +328,11 @@ def _prep_wrapped_messages(self, client_info): default_timeout=20.0, client_info=client_info, ), + self.complete_node_pool_upgrade: gapic_v1.method.wrap_method( + self.complete_node_pool_upgrade, + default_timeout=None, + client_info=client_info, + ), self.rollback_node_pool_upgrade: gapic_v1.method.wrap_method( self.rollback_node_pool_upgrade, default_timeout=45.0, @@ -618,6 +629,15 @@ def delete_node_pool( ]: raise NotImplementedError() + @property + def complete_node_pool_upgrade( + self, + ) -> Callable[ + [cluster_service.CompleteNodePoolUpgradeRequest], + Union[empty_pb2.Empty, Awaitable[empty_pb2.Empty]], + ]: + raise NotImplementedError() + @property def rollback_node_pool_upgrade( self, diff --git a/packages/google-cloud-container/google/cloud/container_v1beta1/services/cluster_manager/transports/grpc.py b/packages/google-cloud-container/google/cloud/container_v1beta1/services/cluster_manager/transports/grpc.py index 311b145bc0ab..de6c192662aa 100644 --- a/packages/google-cloud-container/google/cloud/container_v1beta1/services/cluster_manager/transports/grpc.py +++ b/packages/google-cloud-container/google/cloud/container_v1beta1/services/cluster_manager/transports/grpc.py @@ -58,6 +58,7 @@ def __init__( quota_project_id: Optional[str] = None, client_info: gapic_v1.client_info.ClientInfo = DEFAULT_CLIENT_INFO, always_use_jwt_access: Optional[bool] = False, + api_audience: Optional[str] = None, ) -> None: """Instantiate the transport. @@ -153,6 +154,7 @@ def __init__( quota_project_id=quota_project_id, client_info=client_info, always_use_jwt_access=always_use_jwt_access, + api_audience=api_audience, ) if not self._grpc_channel: @@ -849,6 +851,33 @@ def delete_node_pool( ) return self._stubs["delete_node_pool"] + @property + def complete_node_pool_upgrade( + self, + ) -> Callable[[cluster_service.CompleteNodePoolUpgradeRequest], empty_pb2.Empty]: + r"""Return a callable for the complete node pool upgrade method over gRPC. + + CompleteNodePoolUpgrade will signal an on-going node + pool upgrade to complete. + + Returns: + Callable[[~.CompleteNodePoolUpgradeRequest], + ~.Empty]: + A function that, when called, will call the underlying RPC + on the server. + """ + # Generate a "stub function" on-the-fly which will actually make + # the request. + # gRPC handles serialization and deserialization, so we just need + # to pass in the functions for each. + if "complete_node_pool_upgrade" not in self._stubs: + self._stubs["complete_node_pool_upgrade"] = self.grpc_channel.unary_unary( + "/google.container.v1beta1.ClusterManager/CompleteNodePoolUpgrade", + request_serializer=cluster_service.CompleteNodePoolUpgradeRequest.serialize, + response_deserializer=empty_pb2.Empty.FromString, + ) + return self._stubs["complete_node_pool_upgrade"] + @property def rollback_node_pool_upgrade( self, diff --git a/packages/google-cloud-container/google/cloud/container_v1beta1/services/cluster_manager/transports/grpc_asyncio.py b/packages/google-cloud-container/google/cloud/container_v1beta1/services/cluster_manager/transports/grpc_asyncio.py index 38bc7c68c1cf..bbe069a2b6a5 100644 --- a/packages/google-cloud-container/google/cloud/container_v1beta1/services/cluster_manager/transports/grpc_asyncio.py +++ b/packages/google-cloud-container/google/cloud/container_v1beta1/services/cluster_manager/transports/grpc_asyncio.py @@ -103,6 +103,7 @@ def __init__( quota_project_id=None, client_info: gapic_v1.client_info.ClientInfo = DEFAULT_CLIENT_INFO, always_use_jwt_access: Optional[bool] = False, + api_audience: Optional[str] = None, ) -> None: """Instantiate the transport. @@ -198,6 +199,7 @@ def __init__( quota_project_id=quota_project_id, client_info=client_info, always_use_jwt_access=always_use_jwt_access, + api_audience=api_audience, ) if not self._grpc_channel: @@ -885,6 +887,35 @@ def delete_node_pool( ) return self._stubs["delete_node_pool"] + @property + def complete_node_pool_upgrade( + self, + ) -> Callable[ + [cluster_service.CompleteNodePoolUpgradeRequest], Awaitable[empty_pb2.Empty] + ]: + r"""Return a callable for the complete node pool upgrade method over gRPC. + + CompleteNodePoolUpgrade will signal an on-going node + pool upgrade to complete. + + Returns: + Callable[[~.CompleteNodePoolUpgradeRequest], + Awaitable[~.Empty]]: + A function that, when called, will call the underlying RPC + on the server. + """ + # Generate a "stub function" on-the-fly which will actually make + # the request. + # gRPC handles serialization and deserialization, so we just need + # to pass in the functions for each. + if "complete_node_pool_upgrade" not in self._stubs: + self._stubs["complete_node_pool_upgrade"] = self.grpc_channel.unary_unary( + "/google.container.v1beta1.ClusterManager/CompleteNodePoolUpgrade", + request_serializer=cluster_service.CompleteNodePoolUpgradeRequest.serialize, + response_deserializer=empty_pb2.Empty.FromString, + ) + return self._stubs["complete_node_pool_upgrade"] + @property def rollback_node_pool_upgrade( self, diff --git a/packages/google-cloud-container/google/cloud/container_v1beta1/types/__init__.py b/packages/google-cloud-container/google/cloud/container_v1beta1/types/__init__.py index c477bff16f9a..6f2971294448 100644 --- a/packages/google-cloud-container/google/cloud/container_v1beta1/types/__init__.py +++ b/packages/google-cloud-container/google/cloud/container_v1beta1/types/__init__.py @@ -22,6 +22,7 @@ AutoprovisioningNodePoolDefaults, AutoUpgradeOptions, BinaryAuthorization, + BlueGreenSettings, CancelOperationRequest, ClientCertificateConfig, CloudRunConfig, @@ -30,8 +31,10 @@ ClusterTelemetry, ClusterUpdate, CompleteIPRotationRequest, + CompleteNodePoolUpgradeRequest, ConfidentialNodes, ConfigConnectorConfig, + CostManagementConfig, CreateClusterRequest, CreateNodePoolRequest, DailyMaintenanceWindow, @@ -55,6 +58,7 @@ GetOperationRequest, GetServerConfigRequest, GkeBackupAgentConfig, + GPUSharingConfig, HorizontalPodAutoscaling, HttpLoadBalancing, IdentityServiceConfig, @@ -102,8 +106,10 @@ NodeManagement, NodeNetworkConfig, NodePool, + NodePoolAutoConfig, NodePoolAutoscaling, NodePoolDefaults, + NodePoolUpdateStrategy, NodeTaint, NodeTaints, NotificationConfig, @@ -113,6 +119,7 @@ PrivateClusterConfig, PrivateClusterMasterGlobalAccessConfig, PrivateIPv6GoogleAccess, + ProtectConfig, RecurringTimeWindow, ReleaseChannel, ReservationAffinity, @@ -152,7 +159,9 @@ VerticalPodAutoscaling, VirtualNIC, WindowsVersions, + WorkloadALTSConfig, WorkloadCertificates, + WorkloadConfig, WorkloadIdentityConfig, WorkloadMetadataConfig, ) @@ -166,6 +175,7 @@ "AutoprovisioningNodePoolDefaults", "AutoUpgradeOptions", "BinaryAuthorization", + "BlueGreenSettings", "CancelOperationRequest", "ClientCertificateConfig", "CloudRunConfig", @@ -174,8 +184,10 @@ "ClusterTelemetry", "ClusterUpdate", "CompleteIPRotationRequest", + "CompleteNodePoolUpgradeRequest", "ConfidentialNodes", "ConfigConnectorConfig", + "CostManagementConfig", "CreateClusterRequest", "CreateNodePoolRequest", "DailyMaintenanceWindow", @@ -198,6 +210,7 @@ "GetOperationRequest", "GetServerConfigRequest", "GkeBackupAgentConfig", + "GPUSharingConfig", "HorizontalPodAutoscaling", "HttpLoadBalancing", "IdentityServiceConfig", @@ -245,6 +258,7 @@ "NodeManagement", "NodeNetworkConfig", "NodePool", + "NodePoolAutoConfig", "NodePoolAutoscaling", "NodePoolDefaults", "NodeTaint", @@ -255,6 +269,7 @@ "PodSecurityPolicyConfig", "PrivateClusterConfig", "PrivateClusterMasterGlobalAccessConfig", + "ProtectConfig", "RecurringTimeWindow", "ReleaseChannel", "ReservationAffinity", @@ -293,10 +308,13 @@ "VerticalPodAutoscaling", "VirtualNIC", "WindowsVersions", + "WorkloadALTSConfig", "WorkloadCertificates", + "WorkloadConfig", "WorkloadIdentityConfig", "WorkloadMetadataConfig", "DatapathProvider", + "NodePoolUpdateStrategy", "PrivateIPv6GoogleAccess", "UpgradeResourceType", ) diff --git a/packages/google-cloud-container/google/cloud/container_v1beta1/types/cluster_service.py b/packages/google-cloud-container/google/cloud/container_v1beta1/types/cluster_service.py index 542f625c0572..e5ad3797ba68 100644 --- a/packages/google-cloud-container/google/cloud/container_v1beta1/types/cluster_service.py +++ b/packages/google-cloud-container/google/cloud/container_v1beta1/types/cluster_service.py @@ -13,6 +13,7 @@ # See the License for the specific language governing permissions and # limitations under the License. # +from google.protobuf import duration_pb2 # type: ignore from google.protobuf import timestamp_pb2 # type: ignore from google.protobuf import wrappers_pb2 # type: ignore from google.rpc import code_pb2 # type: ignore @@ -24,8 +25,9 @@ package="google.container.v1beta1", manifest={ "PrivateIPv6GoogleAccess", - "DatapathProvider", "UpgradeResourceType", + "NodePoolUpdateStrategy", + "DatapathProvider", "LinuxNodeConfig", "NodeKubeletConfig", "NodeConfig", @@ -66,8 +68,11 @@ "AuthenticatorGroupsConfig", "ClusterTelemetry", "Cluster", + "WorkloadConfig", + "ProtectConfig", "NodePoolDefaults", "NodeConfigDefaults", + "NodePoolAutoConfig", "ClusterUpdate", "Operation", "OperationProgress", @@ -96,6 +101,7 @@ "DeleteNodePoolRequest", "ListNodePoolsRequest", "GetNodePoolRequest", + "BlueGreenSettings", "NodePool", "NodeManagement", "AutoUpgradeOptions", @@ -107,6 +113,7 @@ "DailyMaintenanceWindow", "SetNodePoolManagementRequest", "SetNodePoolSizeRequest", + "CompleteNodePoolUpgradeRequest", "RollbackNodePoolUpgradeRequest", "ListNodePoolsResponse", "ClusterAutoscaling", @@ -118,6 +125,7 @@ "StartIPRotationRequest", "CompleteIPRotationRequest", "AcceleratorConfig", + "GPUSharingConfig", "ManagedPrometheusConfig", "WorkloadMetadataConfig", "SetNetworkPolicyRequest", @@ -139,6 +147,7 @@ "DNSConfig", "MaxPodsConstraint", "WorkloadIdentityConfig", + "WorkloadALTSConfig", "WorkloadCertificates", "MeshCertificates", "DatabaseEncryption", @@ -151,6 +160,7 @@ "Jwk", "GetJSONWebKeysResponse", "ReleaseChannel", + "CostManagementConfig", "TpuConfig", "Master", "Autopilot", @@ -178,16 +188,6 @@ class PrivateIPv6GoogleAccess(proto.Enum): PRIVATE_IPV6_GOOGLE_ACCESS_BIDIRECTIONAL = 3 -class DatapathProvider(proto.Enum): - r"""The datapath provider selects the implementation of the - Kubernetes networking // model for service resolution and - network policy enforcement. - """ - DATAPATH_PROVIDER_UNSPECIFIED = 0 - LEGACY_DATAPATH = 1 - ADVANCED_DATAPATH = 2 - - class UpgradeResourceType(proto.Enum): r"""UpgradeResourceType is the resource type that is upgrading. It is used in upgrade notifications. @@ -197,6 +197,23 @@ class UpgradeResourceType(proto.Enum): NODE_POOL = 2 +class NodePoolUpdateStrategy(proto.Enum): + r"""Strategy used for node pool update.""" + NODE_POOL_UPDATE_STRATEGY_UNSPECIFIED = 0 + BLUE_GREEN = 2 + SURGE = 3 + + +class DatapathProvider(proto.Enum): + r"""The datapath provider selects the implementation of the + Kubernetes networking model for service resolution and network + policy enforcement. + """ + DATAPATH_PROVIDER_UNSPECIFIED = 0 + LEGACY_DATAPATH = 1 + ADVANCED_DATAPATH = 2 + + class LinuxNodeConfig(proto.Message): r"""Parameters that can be configured on Linux nodes. @@ -207,17 +224,32 @@ class LinuxNodeConfig(proto.Message): The following parameters are supported. + net.core.busy_poll net.core.busy_read net.core.netdev_max_backlog net.core.rmem_max net.core.wmem_default net.core.wmem_max net.core.optmem_max net.core.somaxconn net.ipv4.tcp_rmem net.ipv4.tcp_wmem net.ipv4.tcp_tw_reuse + cgroup_mode (google.cloud.container_v1beta1.types.LinuxNodeConfig.CgroupMode): + cgroup_mode specifies the cgroup mode to be used on the + node. """ + class CgroupMode(proto.Enum): + r"""Possible cgroup modes that can be used.""" + CGROUP_MODE_UNSPECIFIED = 0 + CGROUP_MODE_V1 = 1 + CGROUP_MODE_V2 = 2 + sysctls = proto.MapField( proto.STRING, proto.STRING, number=1, ) + cgroup_mode = proto.Field( + proto.ENUM, + number=2, + enum=CgroupMode, + ) class NodeKubeletConfig(proto.Message): @@ -257,6 +289,12 @@ class NodeKubeletConfig(proto.Message): optional fraction and a unit suffix, such as "300ms". Valid time units are "ns", "us" (or "µs"), "ms", "s", "m", "h". The value must be a positive duration. + pod_pids_limit (int): + Set the Pod PID limits. See + https://kubernetes.io/docs/concepts/policy/pid-limiting/#pod-pid-limits + Controls the maximum number of processes allowed + to run in a pod. The value must be greater than + or equal to 1024 and less than 4194304. """ cpu_manager_policy = proto.Field( @@ -272,11 +310,20 @@ class NodeKubeletConfig(proto.Message): proto.STRING, number=3, ) + pod_pids_limit = proto.Field( + proto.INT64, + number=4, + ) class NodeConfig(proto.Message): r"""Parameters that describe the nodes in a cluster. + GKE Autopilot clusters do not recognize parameters in + ``NodeConfig``. Use + [AutoprovisioningNodePoolDefaults][google.container.v1beta1.AutoprovisioningNodePoolDefaults] + instead. + Attributes: machine_type (str): The name of a Google Compute Engine `machine @@ -453,6 +500,10 @@ class NodeConfig(proto.Message): spot (bool): Spot flag for enabling Spot VM, which is a rebrand of the existing preemptible flag. + confidential_nodes (google.cloud.container_v1beta1.types.ConfidentialNodes): + Confidential nodes config. + All the nodes in the node pool will be + Confidential VM once enabled. """ machine_type = proto.Field( @@ -577,6 +628,11 @@ class NodeConfig(proto.Message): proto.BOOL, number=32, ) + confidential_nodes = proto.Field( + proto.MESSAGE, + number=35, + message="ConfidentialNodes", + ) class AdvancedMachineFeatures(proto.Message): @@ -649,8 +705,47 @@ class NodeNetworkConfig(proto.Message): This field cannot be changed after the node pool has been created. + network_performance_config (google.cloud.container_v1beta1.types.NodeNetworkConfig.NetworkPerformanceConfig): + Network bandwidth tier configuration. + + This field is a member of `oneof`_ ``_network_performance_config``. """ + class NetworkPerformanceConfig(proto.Message): + r"""Configuration of all network bandwidth tiers + + Attributes: + total_egress_bandwidth_tier (google.cloud.container_v1beta1.types.NodeNetworkConfig.NetworkPerformanceConfig.Tier): + Specifies the total network bandwidth tier + for the NodePool. + + This field is a member of `oneof`_ ``_total_egress_bandwidth_tier``. + external_ip_egress_bandwidth_tier (google.cloud.container_v1beta1.types.NodeNetworkConfig.NetworkPerformanceConfig.Tier): + Specifies the network bandwidth tier for the + NodePool for traffic to external/public IP + addresses. + + This field is a member of `oneof`_ ``_external_ip_egress_bandwidth_tier``. + """ + + class Tier(proto.Enum): + r"""Node network tier""" + TIER_UNSPECIFIED = 0 + TIER_1 = 1 + + total_egress_bandwidth_tier = proto.Field( + proto.ENUM, + number=1, + optional=True, + enum="NodeNetworkConfig.NetworkPerformanceConfig.Tier", + ) + external_ip_egress_bandwidth_tier = proto.Field( + proto.ENUM, + number=2, + optional=True, + enum="NodeNetworkConfig.NetworkPerformanceConfig.Tier", + ) + create_pod_range = proto.Field( proto.BOOL, number=4, @@ -663,6 +758,12 @@ class NodeNetworkConfig(proto.Message): proto.STRING, number=6, ) + network_performance_config = proto.Field( + proto.MESSAGE, + number=11, + optional=True, + message=NetworkPerformanceConfig, + ) class ShieldedInstanceConfig(proto.Message): @@ -1623,8 +1724,31 @@ class IPAllocationPolicy(proto.Message): true if use_ip_aliases is true. If both use_ip_aliases and use_routes are false, then the server picks the default IP allocation mode + stack_type (google.cloud.container_v1beta1.types.IPAllocationPolicy.StackType): + IP stack type + ipv6_access_type (google.cloud.container_v1beta1.types.IPAllocationPolicy.IPv6AccessType): + The ipv6 access type (internal or external) when + create_subnetwork is true + subnet_ipv6_cidr_block (str): + Output only. [Output only] The subnet's IPv6 CIDR block used + by nodes and pods. + services_ipv6_cidr_block (str): + Output only. [Output only] The services IPv6 CIDR block for + the cluster. """ + class StackType(proto.Enum): + r"""IP stack type""" + STACK_TYPE_UNSPECIFIED = 0 + IPV4 = 1 + IPV4_IPV6 = 2 + + class IPv6AccessType(proto.Enum): + r"""IPv6 access type""" + IPV6_ACCESS_TYPE_UNSPECIFIED = 0 + INTERNAL = 1 + EXTERNAL = 2 + use_ip_aliases = proto.Field( proto.BOOL, number=1, @@ -1681,6 +1805,24 @@ class IPAllocationPolicy(proto.Message): proto.BOOL, number=15, ) + stack_type = proto.Field( + proto.ENUM, + number=16, + enum=StackType, + ) + ipv6_access_type = proto.Field( + proto.ENUM, + number=17, + enum=IPv6AccessType, + ) + subnet_ipv6_cidr_block = proto.Field( + proto.STRING, + number=22, + ) + services_ipv6_cidr_block = proto.Field( + proto.STRING, + number=23, + ) class BinaryAuthorization(proto.Message): @@ -1690,13 +1832,29 @@ class BinaryAuthorization(proto.Message): enabled (bool): Enable Binary Authorization for this cluster. If enabled, all container images will be - validated by Google Binauthz. + validated by Binary Authorization. + evaluation_mode (google.cloud.container_v1beta1.types.BinaryAuthorization.EvaluationMode): + Mode of operation for binauthz policy + evaluation. Currently the only options are + equivalent to enable/disable. If unspecified, + defaults to DISABLED. """ + class EvaluationMode(proto.Enum): + r"""Binary Authorization mode of operation.""" + EVALUATION_MODE_UNSPECIFIED = 0 + DISABLED = 1 + PROJECT_SINGLETON_POLICY_ENFORCE = 2 + enabled = proto.Field( proto.BOOL, number=1, ) + evaluation_mode = proto.Field( + proto.ENUM, + number=2, + enum=EvaluationMode, + ) class PodSecurityPolicyConfig(proto.Message): @@ -1955,6 +2113,12 @@ class Cluster(proto.Message): mesh_certificates (google.cloud.container_v1beta1.types.MeshCertificates): Configuration for issuance of mTLS keys and certificates to Kubernetes pods. + workload_alts_config (google.cloud.container_v1beta1.types.WorkloadALTSConfig): + Configuration for direct-path (via ALTS) with + workload identity. + cost_management_config (google.cloud.container_v1beta1.types.CostManagementConfig): + Configuration for the fine-grained cost + management feature. cluster_telemetry (google.cloud.container_v1beta1.types.ClusterTelemetry): Telemetry integration for the cluster. tpu_config (google.cloud.container_v1beta1.types.TpuConfig): @@ -1962,7 +2126,9 @@ class Cluster(proto.Message): notification_config (google.cloud.container_v1beta1.types.NotificationConfig): Notification configuration of the cluster. confidential_nodes (google.cloud.container_v1beta1.types.ConfidentialNodes): - Configuration of Confidential Nodes + Configuration of Confidential Nodes. + All the nodes in the cluster will be + Confidential VM once enabled. identity_service_config (google.cloud.container_v1beta1.types.IdentityServiceConfig): Configuration for Identity Service component. self_link (str): @@ -2074,6 +2240,16 @@ class Cluster(proto.Message): Logging configuration for the cluster. monitoring_config (google.cloud.container_v1beta1.types.MonitoringConfig): Monitoring configuration for the cluster. + node_pool_auto_config (google.cloud.container_v1beta1.types.NodePoolAutoConfig): + Node pool configs that apply to all + auto-provisioned node pools in autopilot + clusters and node auto-provisioning enabled + clusters. + protect_config (google.cloud.container_v1beta1.types.ProtectConfig): + Enable/Disable Protect API features for the + cluster. + + This field is a member of `oneof`_ ``_protect_config``. """ class Status(proto.Enum): @@ -2258,6 +2434,16 @@ class Status(proto.Enum): number=67, message="MeshCertificates", ) + workload_alts_config = proto.Field( + proto.MESSAGE, + number=53, + message="WorkloadALTSConfig", + ) + cost_management_config = proto.Field( + proto.MESSAGE, + number=45, + message="CostManagementConfig", + ) cluster_telemetry = proto.Field( proto.MESSAGE, number=46, @@ -2392,6 +2578,65 @@ class Status(proto.Enum): number=133, message="MonitoringConfig", ) + node_pool_auto_config = proto.Field( + proto.MESSAGE, + number=136, + message="NodePoolAutoConfig", + ) + protect_config = proto.Field( + proto.MESSAGE, + number=137, + optional=True, + message="ProtectConfig", + ) + + +class WorkloadConfig(proto.Message): + r"""WorkloadConfig defines the flags to enable or disable the + workload configurations for the cluster. + + Attributes: + audit_mode (google.cloud.container_v1beta1.types.WorkloadConfig.Mode): + Sets which mode of auditing should be used + for the cluster's workloads. + + This field is a member of `oneof`_ ``_audit_mode``. + """ + + class Mode(proto.Enum): + r"""Mode defines how to audit the workload configs.""" + MODE_UNSPECIFIED = 0 + DISABLED = 1 + BASIC = 4 + BASELINE = 2 + RESTRICTED = 3 + + audit_mode = proto.Field( + proto.ENUM, + number=1, + optional=True, + enum=Mode, + ) + + +class ProtectConfig(proto.Message): + r"""ProtectConfig defines the flags needed to enable/disable + features for the Protect API. + + Attributes: + workload_config (google.cloud.container_v1beta1.types.WorkloadConfig): + WorkloadConfig defines which actions are + enabled for a cluster's workload configurations. + + This field is a member of `oneof`_ ``_workload_config``. + """ + + workload_config = proto.Field( + proto.MESSAGE, + number=1, + optional=True, + message="WorkloadConfig", + ) class NodePoolDefaults(proto.Message): @@ -2415,7 +2660,7 @@ class NodeConfigDefaults(proto.Message): Attributes: gcfs_config (google.cloud.container_v1beta1.types.GcfsConfig): - GCFS (Google Container File System, a.k.a + GCFS (Google Container File System, a.k.a. Riptide) options. """ @@ -2426,6 +2671,28 @@ class NodeConfigDefaults(proto.Message): ) +class NodePoolAutoConfig(proto.Message): + r"""node pool configs that apply to all auto-provisioned node + pools in autopilot clusters and node auto-provisioning enabled + clusters + + Attributes: + network_tags (google.cloud.container_v1beta1.types.NetworkTags): + The list of instance tags applied to all + nodes. Tags are used to identify valid sources + or targets for network firewalls and are + specified by the client during cluster creation. + Each tag within the list must comply with + RFC1035. + """ + + network_tags = proto.Field( + proto.MESSAGE, + number=1, + message="NetworkTags", + ) + + class ClusterUpdate(proto.Message): r"""ClusterUpdate describes an update to the cluster. Exactly one update can be applied to a cluster with each request, so at most @@ -2570,8 +2837,14 @@ class ClusterUpdate(proto.Message): desired_mesh_certificates (google.cloud.container_v1beta1.types.MeshCertificates): Configuration for issuance of mTLS keys and certificates to Kubernetes pods. + desired_workload_alts_config (google.cloud.container_v1beta1.types.WorkloadALTSConfig): + Configuration for direct-path (via ALTS) with + workload identity. desired_shielded_nodes (google.cloud.container_v1beta1.types.ShieldedNodes): Configuration for Shielded Nodes. + desired_cost_management_config (google.cloud.container_v1beta1.types.CostManagementConfig): + The desired configuration for the + fine-grained cost management feature. desired_master (google.cloud.container_v1beta1.types.Master): Configuration for master components. desired_dns_config (google.cloud.container_v1beta1.types.DNSConfig): @@ -2590,6 +2863,16 @@ class ClusterUpdate(proto.Message): desired_identity_service_config (google.cloud.container_v1beta1.types.IdentityServiceConfig): The desired Identity Service component configuration. + desired_node_pool_auto_config_network_tags (google.cloud.container_v1beta1.types.NetworkTags): + The desired network tags that apply to all + auto-provisioned node pools in autopilot + clusters and node auto-provisioning enabled + clusters. + desired_protect_config (google.cloud.container_v1beta1.types.ProtectConfig): + Enable/Disable Protect API features for the + cluster. + + This field is a member of `oneof`_ ``_desired_protect_config``. """ desired_node_version = proto.Field( @@ -2735,11 +3018,21 @@ class ClusterUpdate(proto.Message): number=67, message="MeshCertificates", ) + desired_workload_alts_config = proto.Field( + proto.MESSAGE, + number=62, + message="WorkloadALTSConfig", + ) desired_shielded_nodes = proto.Field( proto.MESSAGE, number=48, message="ShieldedNodes", ) + desired_cost_management_config = proto.Field( + proto.MESSAGE, + number=49, + message="CostManagementConfig", + ) desired_master = proto.Field( proto.MESSAGE, number=52, @@ -2775,6 +3068,17 @@ class ClusterUpdate(proto.Message): number=66, message="IdentityServiceConfig", ) + desired_node_pool_auto_config_network_tags = proto.Field( + proto.MESSAGE, + number=110, + message="NetworkTags", + ) + desired_protect_config = proto.Field( + proto.MESSAGE, + number=112, + optional=True, + message="ProtectConfig", + ) class Operation(proto.Message): @@ -3026,7 +3330,7 @@ class CreateClusterRequest(proto.Message): project_id (str): Required. Deprecated. The Google Developers Console `project ID or project - number `__. + number `__. This field has been deprecated and replaced by the parent field. zone (str): @@ -3068,7 +3372,7 @@ class GetClusterRequest(proto.Message): project_id (str): Required. Deprecated. The Google Developers Console `project ID or project - number `__. + number `__. This field has been deprecated and replaced by the name field. zone (str): @@ -3111,7 +3415,7 @@ class UpdateClusterRequest(proto.Message): project_id (str): Required. Deprecated. The Google Developers Console `project ID or project - number `__. + number `__. This field has been deprecated and replaced by the name field. zone (str): @@ -3161,7 +3465,7 @@ class UpdateNodePoolRequest(proto.Message): project_id (str): Required. Deprecated. The Google Developers Console `project ID or project - number `__. + number `__. This field has been deprecated and replaced by the name field. zone (str): @@ -3231,8 +3535,14 @@ class UpdateNodePoolRequest(proto.Message): nodes. kubelet_config (google.cloud.container_v1beta1.types.NodeKubeletConfig): Node kubelet configs. + node_network_config (google.cloud.container_v1beta1.types.NodeNetworkConfig): + Node network config. gcfs_config (google.cloud.container_v1beta1.types.GcfsConfig): GCFS config. + confidential_nodes (google.cloud.container_v1beta1.types.ConfidentialNodes): + Confidential nodes config. + All the nodes in the node pool will be + Confidential VM once enabled. gvnic (google.cloud.container_v1beta1.types.VirtualNIC): Enable or disable gvnic on the node pool. """ @@ -3304,11 +3614,21 @@ class UpdateNodePoolRequest(proto.Message): number=20, message="NodeKubeletConfig", ) + node_network_config = proto.Field( + proto.MESSAGE, + number=21, + message="NodeNetworkConfig", + ) gcfs_config = proto.Field( proto.MESSAGE, number=22, message="GcfsConfig", ) + confidential_nodes = proto.Field( + proto.MESSAGE, + number=23, + message="ConfidentialNodes", + ) gvnic = proto.Field( proto.MESSAGE, number=29, @@ -3324,7 +3644,7 @@ class SetNodePoolAutoscalingRequest(proto.Message): project_id (str): Required. Deprecated. The Google Developers Console `project ID or project - number `__. + number `__. This field has been deprecated and replaced by the name field. zone (str): @@ -3384,7 +3704,7 @@ class SetLoggingServiceRequest(proto.Message): project_id (str): Required. Deprecated. The Google Developers Console `project ID or project - number `__. + number `__. This field has been deprecated and replaced by the name field. zone (str): @@ -3446,7 +3766,7 @@ class SetMonitoringServiceRequest(proto.Message): project_id (str): Required. Deprecated. The Google Developers Console `project ID or project - number `__. + number `__. This field has been deprecated and replaced by the name field. zone (str): @@ -3508,7 +3828,7 @@ class SetAddonsConfigRequest(proto.Message): project_id (str): Required. Deprecated. The Google Developers Console `project ID or project - number `__. + number `__. This field has been deprecated and replaced by the name field. zone (str): @@ -3559,7 +3879,7 @@ class SetLocationsRequest(proto.Message): project_id (str): Required. Deprecated. The Google Developers Console `project ID or project - number `__. + number `__. This field has been deprecated and replaced by the name field. zone (str): @@ -3615,7 +3935,7 @@ class UpdateMasterRequest(proto.Message): project_id (str): Required. Deprecated. The Google Developers Console `project ID or project - number `__. + number `__. This field has been deprecated and replaced by the name field. zone (str): @@ -3675,7 +3995,7 @@ class SetMasterAuthRequest(proto.Message): project_id (str): Required. Deprecated. The Google Developers Console `project ID or project - number `__. + number `__. This field has been deprecated and replaced by the name field. zone (str): @@ -3740,7 +4060,7 @@ class DeleteClusterRequest(proto.Message): project_id (str): Required. Deprecated. The Google Developers Console `project ID or project - number `__. + number `__. This field has been deprecated and replaced by the name field. zone (str): @@ -3783,7 +4103,7 @@ class ListClustersRequest(proto.Message): project_id (str): Required. Deprecated. The Google Developers Console `project ID or project - number `__. + number `__. This field has been deprecated and replaced by the parent field. zone (str): @@ -3841,7 +4161,7 @@ class GetOperationRequest(proto.Message): project_id (str): Required. Deprecated. The Google Developers Console `project ID or project - number `__. + number `__. This field has been deprecated and replaced by the name field. zone (str): @@ -3884,7 +4204,7 @@ class ListOperationsRequest(proto.Message): project_id (str): Required. Deprecated. The Google Developers Console `project ID or project - number `__. + number `__. This field has been deprecated and replaced by the parent field. zone (str): @@ -3920,7 +4240,7 @@ class CancelOperationRequest(proto.Message): project_id (str): Required. Deprecated. The Google Developers Console `project ID or project - number `__. + number `__. This field has been deprecated and replaced by the name field. zone (str): @@ -3988,7 +4308,7 @@ class GetServerConfigRequest(proto.Message): project_id (str): Required. Deprecated. The Google Developers Console `project ID or project - number `__. + number `__. This field has been deprecated and replaced by the name field. zone (str): @@ -4176,7 +4496,7 @@ class CreateNodePoolRequest(proto.Message): project_id (str): Required. Deprecated. The Google Developers Console `project ID or project - number `__. + number `__. This field has been deprecated and replaced by the parent field. zone (str): @@ -4191,7 +4511,7 @@ class CreateNodePoolRequest(proto.Message): node_pool (google.cloud.container_v1beta1.types.NodePool): Required. The node pool to create. parent (str): - The parent (project, location, cluster id) where the node + The parent (project, location, cluster name) where the node pool will be created. Specified in the format ``projects/*/locations/*/clusters/*``. """ @@ -4226,7 +4546,7 @@ class DeleteNodePoolRequest(proto.Message): project_id (str): Required. Deprecated. The Google Developers Console `project ID or project - number `__. + number `__. This field has been deprecated and replaced by the name field. zone (str): @@ -4277,7 +4597,7 @@ class ListNodePoolsRequest(proto.Message): project_id (str): Required. Deprecated. The Google Developers Console `project ID or project - number `__. + number `__. This field has been deprecated and replaced by the parent field. zone (str): @@ -4290,7 +4610,7 @@ class ListNodePoolsRequest(proto.Message): cluster. This field has been deprecated and replaced by the parent field. parent (str): - The parent (project, location, cluster id) where the node + The parent (project, location, cluster name) where the node pools will be listed. Specified in the format ``projects/*/locations/*/clusters/*``. """ @@ -4320,7 +4640,7 @@ class GetNodePoolRequest(proto.Message): project_id (str): Required. Deprecated. The Google Developers Console `project ID or project - number `__. + number `__. This field has been deprecated and replaced by the name field. zone (str): @@ -4364,6 +4684,81 @@ class GetNodePoolRequest(proto.Message): ) +class BlueGreenSettings(proto.Message): + r"""Settings for blue-green upgrade. + + .. _oneof: https://proto-plus-python.readthedocs.io/en/stable/fields.html#oneofs-mutually-exclusive-fields + + Attributes: + standard_rollout_policy (google.cloud.container_v1beta1.types.BlueGreenSettings.StandardRolloutPolicy): + Standard policy for the blue-green upgrade. + + This field is a member of `oneof`_ ``rollout_policy``. + node_pool_soak_duration (google.protobuf.duration_pb2.Duration): + Time needed after draining entire blue pool. + After this period, blue pool will be cleaned up. + + This field is a member of `oneof`_ ``_node_pool_soak_duration``. + """ + + class StandardRolloutPolicy(proto.Message): + r"""Standard rollout policy is the default policy for blue-green. + + This message has `oneof`_ fields (mutually exclusive fields). + For each oneof, at most one member field can be set at the same time. + Setting any member of the oneof automatically clears all other + members. + + .. _oneof: https://proto-plus-python.readthedocs.io/en/stable/fields.html#oneofs-mutually-exclusive-fields + + Attributes: + batch_percentage (float): + Percentage of the bool pool nodes to drain in a batch. The + range of this field should be (0.0, 1.0]. + + This field is a member of `oneof`_ ``update_batch_size``. + batch_node_count (int): + Number of blue nodes to drain in a batch. + + This field is a member of `oneof`_ ``update_batch_size``. + batch_soak_duration (google.protobuf.duration_pb2.Duration): + Soak time after each batch gets drained. + Default to zero. + + This field is a member of `oneof`_ ``_batch_soak_duration``. + """ + + batch_percentage = proto.Field( + proto.FLOAT, + number=1, + oneof="update_batch_size", + ) + batch_node_count = proto.Field( + proto.INT32, + number=2, + oneof="update_batch_size", + ) + batch_soak_duration = proto.Field( + proto.MESSAGE, + number=3, + optional=True, + message=duration_pb2.Duration, + ) + + standard_rollout_policy = proto.Field( + proto.MESSAGE, + number=1, + oneof="rollout_policy", + message=StandardRolloutPolicy, + ) + node_pool_soak_duration = proto.Field( + proto.MESSAGE, + number=2, + optional=True, + message=duration_pb2.Duration, + ) + + class NodePool(proto.Message): r"""NodePool contains the name and configuration for a cluster's node pool. Node pools are a set of nodes (i.e. VM's), with a @@ -4430,7 +4825,9 @@ class NodePool(proto.Message): instance_group_urls (Sequence[str]): [Output only] The resource URLs of the `managed instance groups `__ - associated with this node pool. + associated with this node pool. During the node pool + blue-green upgrade operation, the URLs contain both blue and + green resources. status (google.cloud.container_v1beta1.types.NodePool.Status): [Output only] The status of the nodes in this pool instance. status_message (str): @@ -4459,6 +4856,9 @@ class NodePool(proto.Message): of the upgrade. placement_policy (google.cloud.container_v1beta1.types.NodePool.PlacementPolicy): Specifies the node placement policy. + update_info (google.cloud.container_v1beta1.types.NodePool.UpdateInfo): + Output only. [Output only] Update info contains relevant + information during a node pool update. """ class Status(proto.Enum): @@ -4472,7 +4872,33 @@ class Status(proto.Enum): ERROR = 6 class UpgradeSettings(proto.Message): - r""" + r"""These upgrade settings configure the upgrade strategy for the node + pool. Use strategy to switch between the strategies applied to the + node pool. + + If the strategy is SURGE, use max_surge and max_unavailable to + control the level of parallelism and the level of disruption caused + by upgrade. + + 1. maxSurge controls the number of additional nodes that can be + added to the node pool temporarily for the time of the upgrade to + increase the number of available nodes. + 2. maxUnavailable controls the number of nodes that can be + simultaneously unavailable. + 3. (maxUnavailable + maxSurge) determines the level of parallelism + (how many nodes are being upgraded at the same time). + + If the strategy is BLUE_GREEN, use blue_green_settings to configure + the blue-green upgrade related settings. + + 1. standard_rollout_policy is the default policy. The policy is used + to control the way blue pool gets drained. The draining is + executed in the batch mode. The batch size could be specified as + either percentage of the node pool size or the number of nodes. + batch_soak_duration is the soak time after each batch gets + drained. + 2. node_pool_soak_duration is the soak time after all blue nodes are + drained. After this period, the blue pool nodes will be deleted. Attributes: max_surge (int): @@ -4484,6 +4910,14 @@ class UpgradeSettings(proto.Message): simultaneously unavailable during the upgrade process. A node is considered available if its status is Ready. + strategy (google.cloud.container_v1beta1.types.NodePoolUpdateStrategy): + Update strategy of the node pool. + + This field is a member of `oneof`_ ``_strategy``. + blue_green_settings (google.cloud.container_v1beta1.types.BlueGreenSettings): + Settings for blue-green upgrade strategy. + + This field is a member of `oneof`_ ``_blue_green_settings``. """ max_surge = proto.Field( @@ -4494,6 +4928,92 @@ class UpgradeSettings(proto.Message): proto.INT32, number=2, ) + strategy = proto.Field( + proto.ENUM, + number=3, + optional=True, + enum="NodePoolUpdateStrategy", + ) + blue_green_settings = proto.Field( + proto.MESSAGE, + number=4, + optional=True, + message="BlueGreenSettings", + ) + + class UpdateInfo(proto.Message): + r"""UpdateInfo contains resource (instance groups, etc), status + and other intermediate information relevant to a node pool + upgrade. + + Attributes: + blue_green_info (google.cloud.container_v1beta1.types.NodePool.UpdateInfo.BlueGreenInfo): + Information of a blue-green upgrade. + """ + + class BlueGreenInfo(proto.Message): + r"""Information relevant to blue-green upgrade. + + Attributes: + phase (google.cloud.container_v1beta1.types.NodePool.UpdateInfo.BlueGreenInfo.Phase): + Current blue-green upgrade phase. + blue_instance_group_urls (Sequence[str]): + The resource URLs of the [managed instance groups] + (/compute/docs/instance-groups/creating-groups-of-managed-instances) + associated with blue pool. + green_instance_group_urls (Sequence[str]): + The resource URLs of the [managed instance groups] + (/compute/docs/instance-groups/creating-groups-of-managed-instances) + associated with green pool. + blue_pool_deletion_start_time (str): + Time to start deleting blue pool to complete blue-green + upgrade, in + `RFC3339 `__ text + format. + green_pool_version (str): + Version of green pool. + """ + + class Phase(proto.Enum): + r"""Phase represents the different stages blue-green upgrade is + running in. + """ + PHASE_UNSPECIFIED = 0 + UPDATE_STARTED = 1 + CREATING_GREEN_POOL = 2 + CORDONING_BLUE_POOL = 3 + DRAINING_BLUE_POOL = 4 + NODE_POOL_SOAKING = 5 + DELETING_BLUE_POOL = 6 + ROLLBACK_STARTED = 7 + + phase = proto.Field( + proto.ENUM, + number=1, + enum="NodePool.UpdateInfo.BlueGreenInfo.Phase", + ) + blue_instance_group_urls = proto.RepeatedField( + proto.STRING, + number=2, + ) + green_instance_group_urls = proto.RepeatedField( + proto.STRING, + number=3, + ) + blue_pool_deletion_start_time = proto.Field( + proto.STRING, + number=4, + ) + green_pool_version = proto.Field( + proto.STRING, + number=5, + ) + + blue_green_info = proto.Field( + proto.MESSAGE, + number=1, + message="NodePool.UpdateInfo.BlueGreenInfo", + ) class PlacementPolicy(proto.Message): r"""PlacementPolicy defines the placement policy used by the node @@ -4592,6 +5112,11 @@ class Type(proto.Enum): number=108, message=PlacementPolicy, ) + update_info = proto.Field( + proto.MESSAGE, + number=109, + message=UpdateInfo, + ) class NodeManagement(proto.Message): @@ -4877,7 +5402,7 @@ class SetNodePoolManagementRequest(proto.Message): project_id (str): Required. Deprecated. The Google Developers Console `project ID or project - number `__. + number `__. This field has been deprecated and replaced by the name field. zone (str): @@ -4936,7 +5461,7 @@ class SetNodePoolSizeRequest(proto.Message): project_id (str): Required. Deprecated. The Google Developers Console `project ID or project - number `__. + number `__. This field has been deprecated and replaced by the name field. zone (str): @@ -4987,6 +5512,23 @@ class SetNodePoolSizeRequest(proto.Message): ) +class CompleteNodePoolUpgradeRequest(proto.Message): + r"""CompleteNodePoolUpgradeRequest sets the name of target node + pool to complete upgrade. + + Attributes: + name (str): + The name (project, location, cluster, node pool id) of the + node pool to complete upgrade. Specified in the format + 'projects/*/locations/*/clusters/*/nodePools/*'. + """ + + name = proto.Field( + proto.STRING, + number=1, + ) + + class RollbackNodePoolUpgradeRequest(proto.Message): r"""RollbackNodePoolUpgradeRequest rollbacks the previously Aborted or Failed NodePool upgrade. This will be an no-op if the @@ -4996,7 +5538,7 @@ class RollbackNodePoolUpgradeRequest(proto.Message): project_id (str): Required. Deprecated. The Google Developers Console `project ID or project - number `__. + number `__. This field has been deprecated and replaced by the name field. zone (str): @@ -5016,6 +5558,9 @@ class RollbackNodePoolUpgradeRequest(proto.Message): The name (project, location, cluster, node pool id) of the node poll to rollback upgrade. Specified in the format ``projects/*/locations/*/clusters/*/nodePools/*``. + respect_pdb (bool): + Option for rollback to ignore the + PodDisruptionBudget. Default value is false. """ project_id = proto.Field( @@ -5038,6 +5583,10 @@ class RollbackNodePoolUpgradeRequest(proto.Message): proto.STRING, number=6, ) + respect_pdb = proto.Field( + proto.BOOL, + number=7, + ) class ListNodePoolsResponse(proto.Message): @@ -5145,15 +5694,17 @@ class AutoprovisioningNodePoolDefaults(proto.Message): NodeManagement configuration for this NodePool. min_cpu_platform (str): - Minimum CPU platform to be used by this instance. The - instance may be scheduled on the specified or newer CPU - platform. Applicable values are the friendly names of CPU - platforms, such as ``minCpuPlatform: "Intel Haswell"`` or - ``minCpuPlatform: "Intel Sandy Bridge"``. For more + Deprecated. Minimum CPU platform to be used for NAP created + node pools. The instance may be scheduled on the specified + or newer CPU platform. Applicable values are the friendly + names of CPU platforms, such as minCpuPlatform: Intel + Haswell or minCpuPlatform: Intel Sandy Bridge. For more information, read `how to specify min CPU platform `__ - To unset the min cpu platform field pass "automatic" as - field value. + This field is deprecated, min_cpu_platform should be + specified using cloud.google.com/requested-min-cpu-platform + label selector on the pod. To unset the min cpu platform + field pass "automatic" as field value. disk_size_gb (int): Size of the disk attached to each node, specified in GB. The smallest allowed disk size @@ -5271,7 +5822,28 @@ class NodePoolAutoscaling(proto.Message): scale up the cluster. autoprovisioned (bool): Can this node pool be deleted automatically. - """ + location_policy (google.cloud.container_v1beta1.types.NodePoolAutoscaling.LocationPolicy): + Location policy used when scaling up a + nodepool. + total_min_node_count (int): + Minimum number of nodes in the node pool. Must be greater + than 1 less than total_max_node_count. The + total_*_node_count fields are mutually exclusive with the + \*_node_count fields. + total_max_node_count (int): + Maximum number of nodes in the node pool. Must be greater + than total_min_node_count. There has to be enough quota to + scale up the cluster. The total_*_node_count fields are + mutually exclusive with the \*_node_count fields. + """ + + class LocationPolicy(proto.Enum): + r"""Location policy specifies how zones are picked when scaling + up the nodepool. + """ + LOCATION_POLICY_UNSPECIFIED = 0 + BALANCED = 1 + ANY = 2 enabled = proto.Field( proto.BOOL, @@ -5289,6 +5861,19 @@ class NodePoolAutoscaling(proto.Message): proto.BOOL, number=4, ) + location_policy = proto.Field( + proto.ENUM, + number=5, + enum=LocationPolicy, + ) + total_min_node_count = proto.Field( + proto.INT32, + number=6, + ) + total_max_node_count = proto.Field( + proto.INT32, + number=7, + ) class SetLabelsRequest(proto.Message): @@ -5300,7 +5885,7 @@ class SetLabelsRequest(proto.Message): project_id (str): Required. Deprecated. The Google Developers Console `project ID or project - number `__. + number `__. This field has been deprecated and replaced by the name field. zone (str): @@ -5323,7 +5908,7 @@ class SetLabelsRequest(proto.Message): changing labels. Make a ``get()`` request to the resource to get the latest fingerprint. name (str): - The name (project, location, cluster id) of the cluster to + The name (project, location, cluster name) of the cluster to set labels. Specified in the format ``projects/*/locations/*/clusters/*``. """ @@ -5363,7 +5948,7 @@ class SetLegacyAbacRequest(proto.Message): project_id (str): Required. Deprecated. The Google Developers Console `project ID or project - number `__. + number `__. This field has been deprecated and replaced by the name field. zone (str): @@ -5379,7 +5964,7 @@ class SetLegacyAbacRequest(proto.Message): Required. Whether ABAC authorization will be enabled in the cluster. name (str): - The name (project, location, cluster id) of the cluster to + The name (project, location, cluster name) of the cluster to set legacy abac. Specified in the format ``projects/*/locations/*/clusters/*``. """ @@ -5415,7 +6000,7 @@ class StartIPRotationRequest(proto.Message): project_id (str): Required. Deprecated. The Google Developers Console `project ID or project - number `__. + number `__. This field has been deprecated and replaced by the name field. zone (str): @@ -5428,7 +6013,7 @@ class StartIPRotationRequest(proto.Message): cluster. This field has been deprecated and replaced by the name field. name (str): - The name (project, location, cluster id) of the cluster to + The name (project, location, cluster name) of the cluster to start IP rotation. Specified in the format ``projects/*/locations/*/clusters/*``. rotate_credentials (bool): @@ -5466,7 +6051,7 @@ class CompleteIPRotationRequest(proto.Message): project_id (str): Required. Deprecated. The Google Developers Console `project ID or project - number `__. + number `__. This field has been deprecated and replaced by the name field. zone (str): @@ -5479,7 +6064,7 @@ class CompleteIPRotationRequest(proto.Message): cluster. This field has been deprecated and replaced by the name field. name (str): - The name (project, location, cluster id) of the cluster to + The name (project, location, cluster name) of the cluster to complete IP rotation. Specified in the format ``projects/*/locations/*/clusters/*``. """ @@ -5517,6 +6102,13 @@ class AcceleratorConfig(proto.Message): Size of partitions to create on the GPU. Valid values are described in the NVIDIA `mig user guide `__. + max_time_shared_clients_per_gpu (int): + The number of time-shared GPU resources to + expose for each physical GPU. + gpu_sharing_config (google.cloud.container_v1beta1.types.GPUSharingConfig): + The configuration for GPU sharing options. + + This field is a member of `oneof`_ ``_gpu_sharing_config``. """ accelerator_count = proto.Field( @@ -5531,6 +6123,48 @@ class AcceleratorConfig(proto.Message): proto.STRING, number=3, ) + max_time_shared_clients_per_gpu = proto.Field( + proto.INT64, + number=4, + ) + gpu_sharing_config = proto.Field( + proto.MESSAGE, + number=5, + optional=True, + message="GPUSharingConfig", + ) + + +class GPUSharingConfig(proto.Message): + r"""GPUSharingConfig represents the GPU sharing configuration for + Hardware Accelerators. + + Attributes: + max_shared_clients_per_gpu (int): + The max number of containers that can share a + physical GPU. + gpu_sharing_strategy (google.cloud.container_v1beta1.types.GPUSharingConfig.GPUSharingStrategy): + The type of GPU sharing strategy to enable on + the GPU node. + + This field is a member of `oneof`_ ``_gpu_sharing_strategy``. + """ + + class GPUSharingStrategy(proto.Enum): + r"""The type of GPU sharing strategy currently provided.""" + GPU_SHARING_STRATEGY_UNSPECIFIED = 0 + TIME_SHARING = 1 + + max_shared_clients_per_gpu = proto.Field( + proto.INT64, + number=1, + ) + gpu_sharing_strategy = proto.Field( + proto.ENUM, + number=2, + optional=True, + enum=GPUSharingStrategy, + ) class ManagedPrometheusConfig(proto.Message): @@ -5599,7 +6233,7 @@ class SetNetworkPolicyRequest(proto.Message): project_id (str): Required. Deprecated. The Google Developers Console `project ID or project - number `__. + number `__. This field has been deprecated and replaced by the name field. zone (str): @@ -5615,7 +6249,7 @@ class SetNetworkPolicyRequest(proto.Message): Required. Configuration options for the NetworkPolicy feature. name (str): - The name (project, location, cluster id) of the cluster to + The name (project, location, cluster name) of the cluster to set networking policy. Specified in the format ``projects/*/locations/*/clusters/*``. """ @@ -5651,7 +6285,7 @@ class SetMaintenancePolicyRequest(proto.Message): project_id (str): Required. The Google Developers Console `project ID or project - number `__. + number `__. zone (str): Required. The name of the Google Compute Engine `zone `__ @@ -5663,7 +6297,7 @@ class SetMaintenancePolicyRequest(proto.Message): for the cluster. An empty field clears the existing maintenance policy. name (str): - The name (project, location, cluster id) of the cluster to + The name (project, location, cluster name) of the cluster to set maintenance policy. Specified in the format ``projects/*/locations/*/clusters/*``. """ @@ -6237,6 +6871,27 @@ class WorkloadIdentityConfig(proto.Message): ) +class WorkloadALTSConfig(proto.Message): + r"""Configuration for direct-path (via ALTS) with workload + identity. + + Attributes: + enable_alts (google.protobuf.wrappers_pb2.BoolValue): + enable_alts controls whether the alts handshaker should be + enabled or not for direct-path. + + Requires Workload Identity + ([workload_pool][google.container.v1beta1.WorkloadIdentityConfig.workload_pool] + must be non-empty). + """ + + enable_alts = proto.Field( + proto.MESSAGE, + number=1, + message=wrappers_pb2.BoolValue, + ) + + class WorkloadCertificates(proto.Message): r"""Configuration for issuance of mTLS keys and certificates to Kubernetes pods. @@ -6489,8 +7144,8 @@ class GetJSONWebKeysRequest(proto.Message): Attributes: parent (str): - The cluster (project, location, cluster id) to get keys for. - Specified in the format + The cluster (project, location, cluster name) to get keys + for. Specified in the format ``projects/*/locations/*/clusters/*``. """ @@ -6606,6 +7261,20 @@ class Channel(proto.Enum): ) +class CostManagementConfig(proto.Message): + r"""Configuration for fine-grained cost management feature. + + Attributes: + enabled (bool): + Whether the feature is enabled or not. + """ + + enabled = proto.Field( + proto.BOOL, + number=1, + ) + + class TpuConfig(proto.Message): r"""Configuration for Cloud TPU. @@ -6733,8 +7402,8 @@ class ConfidentialNodes(proto.Message): Attributes: enabled (bool): - Whether Confidential Nodes feature is enabled - for all nodes in this cluster. + Whether Confidential Nodes feature is + enabled. """ enabled = proto.Field( @@ -7016,6 +7685,9 @@ class Component(proto.Enum): COMPONENT_UNSPECIFIED = 0 SYSTEM_COMPONENTS = 1 WORKLOADS = 2 + APISERVER = 3 + SCHEDULER = 4 + CONTROLLER_MANAGER = 5 enable_components = proto.RepeatedField( proto.ENUM, diff --git a/packages/google-cloud-container/samples/generated_samples/container_v1_generated_cluster_manager_complete_node_pool_upgrade_async.py b/packages/google-cloud-container/samples/generated_samples/container_v1_generated_cluster_manager_complete_node_pool_upgrade_async.py new file mode 100644 index 000000000000..77b7649634fc --- /dev/null +++ b/packages/google-cloud-container/samples/generated_samples/container_v1_generated_cluster_manager_complete_node_pool_upgrade_async.py @@ -0,0 +1,42 @@ +# -*- coding: utf-8 -*- +# Copyright 2022 Google LLC +# +# Licensed under the Apache License, Version 2.0 (the "License"); +# you may not use this file except in compliance with the License. +# You may obtain a copy of the License at +# +# http://www.apache.org/licenses/LICENSE-2.0 +# +# 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. +# +# Generated code. DO NOT EDIT! +# +# Snippet for CompleteNodePoolUpgrade +# NOTE: This snippet has been automatically generated for illustrative purposes only. +# It may require modifications to work in your environment. + +# To install the latest published package dependency, execute the following: +# python3 -m pip install google-cloud-container + + +# [START container_v1_generated_ClusterManager_CompleteNodePoolUpgrade_async] +from google.cloud import container_v1 + + +async def sample_complete_node_pool_upgrade(): + # Create a client + client = container_v1.ClusterManagerAsyncClient() + + # Initialize request argument(s) + request = container_v1.CompleteNodePoolUpgradeRequest( + ) + + # Make the request + await client.complete_node_pool_upgrade(request=request) + + +# [END container_v1_generated_ClusterManager_CompleteNodePoolUpgrade_async] diff --git a/packages/google-cloud-container/samples/generated_samples/container_v1_generated_cluster_manager_complete_node_pool_upgrade_sync.py b/packages/google-cloud-container/samples/generated_samples/container_v1_generated_cluster_manager_complete_node_pool_upgrade_sync.py new file mode 100644 index 000000000000..1ca4bfa30185 --- /dev/null +++ b/packages/google-cloud-container/samples/generated_samples/container_v1_generated_cluster_manager_complete_node_pool_upgrade_sync.py @@ -0,0 +1,42 @@ +# -*- coding: utf-8 -*- +# Copyright 2022 Google LLC +# +# Licensed under the Apache License, Version 2.0 (the "License"); +# you may not use this file except in compliance with the License. +# You may obtain a copy of the License at +# +# http://www.apache.org/licenses/LICENSE-2.0 +# +# 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. +# +# Generated code. DO NOT EDIT! +# +# Snippet for CompleteNodePoolUpgrade +# NOTE: This snippet has been automatically generated for illustrative purposes only. +# It may require modifications to work in your environment. + +# To install the latest published package dependency, execute the following: +# python3 -m pip install google-cloud-container + + +# [START container_v1_generated_ClusterManager_CompleteNodePoolUpgrade_sync] +from google.cloud import container_v1 + + +def sample_complete_node_pool_upgrade(): + # Create a client + client = container_v1.ClusterManagerClient() + + # Initialize request argument(s) + request = container_v1.CompleteNodePoolUpgradeRequest( + ) + + # Make the request + client.complete_node_pool_upgrade(request=request) + + +# [END container_v1_generated_ClusterManager_CompleteNodePoolUpgrade_sync] diff --git a/packages/google-cloud-container/samples/generated_samples/container_v1beta1_generated_cluster_manager_complete_node_pool_upgrade_async.py b/packages/google-cloud-container/samples/generated_samples/container_v1beta1_generated_cluster_manager_complete_node_pool_upgrade_async.py new file mode 100644 index 000000000000..0f495599e5a6 --- /dev/null +++ b/packages/google-cloud-container/samples/generated_samples/container_v1beta1_generated_cluster_manager_complete_node_pool_upgrade_async.py @@ -0,0 +1,42 @@ +# -*- coding: utf-8 -*- +# Copyright 2022 Google LLC +# +# Licensed under the Apache License, Version 2.0 (the "License"); +# you may not use this file except in compliance with the License. +# You may obtain a copy of the License at +# +# http://www.apache.org/licenses/LICENSE-2.0 +# +# 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. +# +# Generated code. DO NOT EDIT! +# +# Snippet for CompleteNodePoolUpgrade +# NOTE: This snippet has been automatically generated for illustrative purposes only. +# It may require modifications to work in your environment. + +# To install the latest published package dependency, execute the following: +# python3 -m pip install google-cloud-container + + +# [START container_v1beta1_generated_ClusterManager_CompleteNodePoolUpgrade_async] +from google.cloud import container_v1beta1 + + +async def sample_complete_node_pool_upgrade(): + # Create a client + client = container_v1beta1.ClusterManagerAsyncClient() + + # Initialize request argument(s) + request = container_v1beta1.CompleteNodePoolUpgradeRequest( + ) + + # Make the request + await client.complete_node_pool_upgrade(request=request) + + +# [END container_v1beta1_generated_ClusterManager_CompleteNodePoolUpgrade_async] diff --git a/packages/google-cloud-container/samples/generated_samples/container_v1beta1_generated_cluster_manager_complete_node_pool_upgrade_sync.py b/packages/google-cloud-container/samples/generated_samples/container_v1beta1_generated_cluster_manager_complete_node_pool_upgrade_sync.py new file mode 100644 index 000000000000..6a7cf3c37199 --- /dev/null +++ b/packages/google-cloud-container/samples/generated_samples/container_v1beta1_generated_cluster_manager_complete_node_pool_upgrade_sync.py @@ -0,0 +1,42 @@ +# -*- coding: utf-8 -*- +# Copyright 2022 Google LLC +# +# Licensed under the Apache License, Version 2.0 (the "License"); +# you may not use this file except in compliance with the License. +# You may obtain a copy of the License at +# +# http://www.apache.org/licenses/LICENSE-2.0 +# +# 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. +# +# Generated code. DO NOT EDIT! +# +# Snippet for CompleteNodePoolUpgrade +# NOTE: This snippet has been automatically generated for illustrative purposes only. +# It may require modifications to work in your environment. + +# To install the latest published package dependency, execute the following: +# python3 -m pip install google-cloud-container + + +# [START container_v1beta1_generated_ClusterManager_CompleteNodePoolUpgrade_sync] +from google.cloud import container_v1beta1 + + +def sample_complete_node_pool_upgrade(): + # Create a client + client = container_v1beta1.ClusterManagerClient() + + # Initialize request argument(s) + request = container_v1beta1.CompleteNodePoolUpgradeRequest( + ) + + # Make the request + client.complete_node_pool_upgrade(request=request) + + +# [END container_v1beta1_generated_ClusterManager_CompleteNodePoolUpgrade_sync] diff --git a/packages/google-cloud-container/samples/generated_samples/snippet_metadata_container_v1.json b/packages/google-cloud-container/samples/generated_samples/snippet_metadata_container_v1.json index e2cd36d9d603..ec33bf31bd25 100644 --- a/packages/google-cloud-container/samples/generated_samples/snippet_metadata_container_v1.json +++ b/packages/google-cloud-container/samples/generated_samples/snippet_metadata_container_v1.json @@ -374,6 +374,153 @@ ], "title": "container_v1_generated_cluster_manager_complete_ip_rotation_sync.py" }, + { + "canonical": true, + "clientMethod": { + "async": true, + "client": { + "fullName": "google.cloud.container_v1.ClusterManagerAsyncClient", + "shortName": "ClusterManagerAsyncClient" + }, + "fullName": "google.cloud.container_v1.ClusterManagerAsyncClient.complete_node_pool_upgrade", + "method": { + "fullName": "google.container.v1.ClusterManager.CompleteNodePoolUpgrade", + "service": { + "fullName": "google.container.v1.ClusterManager", + "shortName": "ClusterManager" + }, + "shortName": "CompleteNodePoolUpgrade" + }, + "parameters": [ + { + "name": "request", + "type": "google.cloud.container_v1.types.CompleteNodePoolUpgradeRequest" + }, + { + "name": "retry", + "type": "google.api_core.retry.Retry" + }, + { + "name": "timeout", + "type": "float" + }, + { + "name": "metadata", + "type": "Sequence[Tuple[str, str]" + } + ], + "shortName": "complete_node_pool_upgrade" + }, + "description": "Sample for CompleteNodePoolUpgrade", + "file": "container_v1_generated_cluster_manager_complete_node_pool_upgrade_async.py", + "language": "PYTHON", + "origin": "API_DEFINITION", + "regionTag": "container_v1_generated_ClusterManager_CompleteNodePoolUpgrade_async", + "segments": [ + { + "end": 41, + "start": 27, + "type": "FULL" + }, + { + "end": 41, + "start": 27, + "type": "SHORT" + }, + { + "end": 33, + "start": 31, + "type": "CLIENT_INITIALIZATION" + }, + { + "end": 37, + "start": 34, + "type": "REQUEST_INITIALIZATION" + }, + { + "start": 38, + "type": "REQUEST_EXECUTION" + }, + { + "end": 42, + "type": "RESPONSE_HANDLING" + } + ], + "title": "container_v1_generated_cluster_manager_complete_node_pool_upgrade_async.py" + }, + { + "canonical": true, + "clientMethod": { + "client": { + "fullName": "google.cloud.container_v1.ClusterManagerClient", + "shortName": "ClusterManagerClient" + }, + "fullName": "google.cloud.container_v1.ClusterManagerClient.complete_node_pool_upgrade", + "method": { + "fullName": "google.container.v1.ClusterManager.CompleteNodePoolUpgrade", + "service": { + "fullName": "google.container.v1.ClusterManager", + "shortName": "ClusterManager" + }, + "shortName": "CompleteNodePoolUpgrade" + }, + "parameters": [ + { + "name": "request", + "type": "google.cloud.container_v1.types.CompleteNodePoolUpgradeRequest" + }, + { + "name": "retry", + "type": "google.api_core.retry.Retry" + }, + { + "name": "timeout", + "type": "float" + }, + { + "name": "metadata", + "type": "Sequence[Tuple[str, str]" + } + ], + "shortName": "complete_node_pool_upgrade" + }, + "description": "Sample for CompleteNodePoolUpgrade", + "file": "container_v1_generated_cluster_manager_complete_node_pool_upgrade_sync.py", + "language": "PYTHON", + "origin": "API_DEFINITION", + "regionTag": "container_v1_generated_ClusterManager_CompleteNodePoolUpgrade_sync", + "segments": [ + { + "end": 41, + "start": 27, + "type": "FULL" + }, + { + "end": 41, + "start": 27, + "type": "SHORT" + }, + { + "end": 33, + "start": 31, + "type": "CLIENT_INITIALIZATION" + }, + { + "end": 37, + "start": 34, + "type": "REQUEST_INITIALIZATION" + }, + { + "start": 38, + "type": "REQUEST_EXECUTION" + }, + { + "end": 42, + "type": "RESPONSE_HANDLING" + } + ], + "title": "container_v1_generated_cluster_manager_complete_node_pool_upgrade_sync.py" + }, { "canonical": true, "clientMethod": { diff --git a/packages/google-cloud-container/samples/generated_samples/snippet_metadata_container_v1beta1.json b/packages/google-cloud-container/samples/generated_samples/snippet_metadata_container_v1beta1.json index 850ebf588ee9..2045174a5709 100644 --- a/packages/google-cloud-container/samples/generated_samples/snippet_metadata_container_v1beta1.json +++ b/packages/google-cloud-container/samples/generated_samples/snippet_metadata_container_v1beta1.json @@ -358,6 +358,153 @@ ], "title": "container_v1beta1_generated_cluster_manager_complete_ip_rotation_sync.py" }, + { + "canonical": true, + "clientMethod": { + "async": true, + "client": { + "fullName": "google.cloud.container_v1beta1.ClusterManagerAsyncClient", + "shortName": "ClusterManagerAsyncClient" + }, + "fullName": "google.cloud.container_v1beta1.ClusterManagerAsyncClient.complete_node_pool_upgrade", + "method": { + "fullName": "google.container.v1beta1.ClusterManager.CompleteNodePoolUpgrade", + "service": { + "fullName": "google.container.v1beta1.ClusterManager", + "shortName": "ClusterManager" + }, + "shortName": "CompleteNodePoolUpgrade" + }, + "parameters": [ + { + "name": "request", + "type": "google.cloud.container_v1beta1.types.CompleteNodePoolUpgradeRequest" + }, + { + "name": "retry", + "type": "google.api_core.retry.Retry" + }, + { + "name": "timeout", + "type": "float" + }, + { + "name": "metadata", + "type": "Sequence[Tuple[str, str]" + } + ], + "shortName": "complete_node_pool_upgrade" + }, + "description": "Sample for CompleteNodePoolUpgrade", + "file": "container_v1beta1_generated_cluster_manager_complete_node_pool_upgrade_async.py", + "language": "PYTHON", + "origin": "API_DEFINITION", + "regionTag": "container_v1beta1_generated_ClusterManager_CompleteNodePoolUpgrade_async", + "segments": [ + { + "end": 41, + "start": 27, + "type": "FULL" + }, + { + "end": 41, + "start": 27, + "type": "SHORT" + }, + { + "end": 33, + "start": 31, + "type": "CLIENT_INITIALIZATION" + }, + { + "end": 37, + "start": 34, + "type": "REQUEST_INITIALIZATION" + }, + { + "start": 38, + "type": "REQUEST_EXECUTION" + }, + { + "end": 42, + "type": "RESPONSE_HANDLING" + } + ], + "title": "container_v1beta1_generated_cluster_manager_complete_node_pool_upgrade_async.py" + }, + { + "canonical": true, + "clientMethod": { + "client": { + "fullName": "google.cloud.container_v1beta1.ClusterManagerClient", + "shortName": "ClusterManagerClient" + }, + "fullName": "google.cloud.container_v1beta1.ClusterManagerClient.complete_node_pool_upgrade", + "method": { + "fullName": "google.container.v1beta1.ClusterManager.CompleteNodePoolUpgrade", + "service": { + "fullName": "google.container.v1beta1.ClusterManager", + "shortName": "ClusterManager" + }, + "shortName": "CompleteNodePoolUpgrade" + }, + "parameters": [ + { + "name": "request", + "type": "google.cloud.container_v1beta1.types.CompleteNodePoolUpgradeRequest" + }, + { + "name": "retry", + "type": "google.api_core.retry.Retry" + }, + { + "name": "timeout", + "type": "float" + }, + { + "name": "metadata", + "type": "Sequence[Tuple[str, str]" + } + ], + "shortName": "complete_node_pool_upgrade" + }, + "description": "Sample for CompleteNodePoolUpgrade", + "file": "container_v1beta1_generated_cluster_manager_complete_node_pool_upgrade_sync.py", + "language": "PYTHON", + "origin": "API_DEFINITION", + "regionTag": "container_v1beta1_generated_ClusterManager_CompleteNodePoolUpgrade_sync", + "segments": [ + { + "end": 41, + "start": 27, + "type": "FULL" + }, + { + "end": 41, + "start": 27, + "type": "SHORT" + }, + { + "end": 33, + "start": 31, + "type": "CLIENT_INITIALIZATION" + }, + { + "end": 37, + "start": 34, + "type": "REQUEST_INITIALIZATION" + }, + { + "start": 38, + "type": "REQUEST_EXECUTION" + }, + { + "end": 42, + "type": "RESPONSE_HANDLING" + } + ], + "title": "container_v1beta1_generated_cluster_manager_complete_node_pool_upgrade_sync.py" + }, { "canonical": true, "clientMethod": { diff --git a/packages/google-cloud-container/scripts/fixup_container_v1_keywords.py b/packages/google-cloud-container/scripts/fixup_container_v1_keywords.py index a7cf261c8a88..81c69248617b 100644 --- a/packages/google-cloud-container/scripts/fixup_container_v1_keywords.py +++ b/packages/google-cloud-container/scripts/fixup_container_v1_keywords.py @@ -41,6 +41,7 @@ class containerCallTransformer(cst.CSTTransformer): METHOD_TO_PARAMS: Dict[str, Tuple[str]] = { 'cancel_operation': ('project_id', 'zone', 'operation_id', 'name', ), 'complete_ip_rotation': ('project_id', 'zone', 'cluster_id', 'name', ), + 'complete_node_pool_upgrade': ('name', ), 'create_cluster': ('cluster', 'project_id', 'zone', 'parent', ), 'create_node_pool': ('node_pool', 'project_id', 'zone', 'cluster_id', 'parent', ), 'delete_cluster': ('project_id', 'zone', 'cluster_id', 'name', ), @@ -54,7 +55,7 @@ class containerCallTransformer(cst.CSTTransformer): 'list_node_pools': ('project_id', 'zone', 'cluster_id', 'parent', ), 'list_operations': ('project_id', 'zone', 'parent', ), 'list_usable_subnetworks': ('parent', 'filter', 'page_size', 'page_token', ), - 'rollback_node_pool_upgrade': ('project_id', 'zone', 'cluster_id', 'node_pool_id', 'name', ), + 'rollback_node_pool_upgrade': ('project_id', 'zone', 'cluster_id', 'node_pool_id', 'name', 'respect_pdb', ), 'set_addons_config': ('addons_config', 'project_id', 'zone', 'cluster_id', 'name', ), 'set_labels': ('resource_labels', 'label_fingerprint', 'project_id', 'zone', 'cluster_id', 'name', ), 'set_legacy_abac': ('enabled', 'project_id', 'zone', 'cluster_id', 'name', ), @@ -70,7 +71,7 @@ class containerCallTransformer(cst.CSTTransformer): 'start_ip_rotation': ('project_id', 'zone', 'cluster_id', 'name', 'rotate_credentials', ), 'update_cluster': ('update', 'project_id', 'zone', 'cluster_id', 'name', ), 'update_master': ('master_version', 'project_id', 'zone', 'cluster_id', 'name', ), - 'update_node_pool': ('node_version', 'image_type', 'project_id', 'zone', 'cluster_id', 'node_pool_id', 'name', 'locations', 'workload_metadata_config', 'upgrade_settings', 'linux_node_config', 'kubelet_config', 'gcfs_config', 'gvnic', ), + 'update_node_pool': ('node_version', 'image_type', 'project_id', 'zone', 'cluster_id', 'node_pool_id', 'name', 'locations', 'workload_metadata_config', 'upgrade_settings', 'tags', 'taints', 'labels', 'linux_node_config', 'kubelet_config', 'node_network_config', 'gcfs_config', 'confidential_nodes', 'gvnic', ), } def leave_Call(self, original: cst.Call, updated: cst.Call) -> cst.CSTNode: diff --git a/packages/google-cloud-container/scripts/fixup_container_v1beta1_keywords.py b/packages/google-cloud-container/scripts/fixup_container_v1beta1_keywords.py index c30a4ee07c1c..79b635f76909 100644 --- a/packages/google-cloud-container/scripts/fixup_container_v1beta1_keywords.py +++ b/packages/google-cloud-container/scripts/fixup_container_v1beta1_keywords.py @@ -41,6 +41,7 @@ class containerCallTransformer(cst.CSTTransformer): METHOD_TO_PARAMS: Dict[str, Tuple[str]] = { 'cancel_operation': ('project_id', 'zone', 'operation_id', 'name', ), 'complete_ip_rotation': ('project_id', 'zone', 'cluster_id', 'name', ), + 'complete_node_pool_upgrade': ('name', ), 'create_cluster': ('project_id', 'zone', 'cluster', 'parent', ), 'create_node_pool': ('project_id', 'zone', 'cluster_id', 'node_pool', 'parent', ), 'delete_cluster': ('project_id', 'zone', 'cluster_id', 'name', ), @@ -55,7 +56,7 @@ class containerCallTransformer(cst.CSTTransformer): 'list_node_pools': ('project_id', 'zone', 'cluster_id', 'parent', ), 'list_operations': ('project_id', 'zone', 'parent', ), 'list_usable_subnetworks': ('parent', 'filter', 'page_size', 'page_token', ), - 'rollback_node_pool_upgrade': ('project_id', 'zone', 'cluster_id', 'node_pool_id', 'name', ), + 'rollback_node_pool_upgrade': ('project_id', 'zone', 'cluster_id', 'node_pool_id', 'name', 'respect_pdb', ), 'set_addons_config': ('project_id', 'zone', 'cluster_id', 'addons_config', 'name', ), 'set_labels': ('project_id', 'zone', 'cluster_id', 'resource_labels', 'label_fingerprint', 'name', ), 'set_legacy_abac': ('project_id', 'zone', 'cluster_id', 'enabled', 'name', ), @@ -71,7 +72,7 @@ class containerCallTransformer(cst.CSTTransformer): 'start_ip_rotation': ('project_id', 'zone', 'cluster_id', 'name', 'rotate_credentials', ), 'update_cluster': ('project_id', 'zone', 'cluster_id', 'update', 'name', ), 'update_master': ('project_id', 'zone', 'cluster_id', 'master_version', 'name', ), - 'update_node_pool': ('project_id', 'zone', 'cluster_id', 'node_pool_id', 'node_version', 'image_type', 'locations', 'workload_metadata_config', 'name', 'upgrade_settings', 'tags', 'taints', 'labels', 'linux_node_config', 'kubelet_config', 'gcfs_config', 'gvnic', ), + 'update_node_pool': ('project_id', 'zone', 'cluster_id', 'node_pool_id', 'node_version', 'image_type', 'locations', 'workload_metadata_config', 'name', 'upgrade_settings', 'tags', 'taints', 'labels', 'linux_node_config', 'kubelet_config', 'node_network_config', 'gcfs_config', 'confidential_nodes', 'gvnic', ), } def leave_Call(self, original: cst.Call, updated: cst.Call) -> cst.CSTNode: diff --git a/packages/google-cloud-container/setup.py b/packages/google-cloud-container/setup.py index 0a5b009059ff..1f5384ffbba5 100644 --- a/packages/google-cloud-container/setup.py +++ b/packages/google-cloud-container/setup.py @@ -28,10 +28,7 @@ # 'Development Status :: 5 - Production/Stable' release_status = "Development Status :: 5 - Production/Stable" dependencies = [ - # NOTE: Maintainers, please do not require google-api-core>=2.x.x - # Until this issue is closed - # https://github.com/googleapis/google-cloud-python/issues/10566 - "google-api-core[grpc] >= 1.31.5, <3.0.0dev,!=2.0.*,!=2.1.*,!=2.2.*,!=2.3.0", + "google-api-core[grpc] >= 1.32.0, <3.0.0dev,!=2.0.*,!=2.1.*,!=2.2.*,!=2.3.*,!=2.4.*,!=2.5.*,!=2.6.*,!=2.7.*", "grpc-google-iam-v1 >=0.12.4, <1.0.0dev", "proto-plus >= 1.15.0, <2.0.0dev", "protobuf >= 3.19.0, <4.0.0dev", diff --git a/packages/google-cloud-container/testing/constraints-3.6.txt b/packages/google-cloud-container/testing/constraints-3.6.txt deleted file mode 100644 index c4e0fd7dec6c..000000000000 --- a/packages/google-cloud-container/testing/constraints-3.6.txt +++ /dev/null @@ -1,12 +0,0 @@ -# This constraints file is used to check that lower bounds -# are correct in setup.py -# List *all* library dependencies and extras in this file. -# Pin the version to the lower bound. -# -# e.g., if setup.py has "foo >= 1.14.0, < 2.0.0dev", -# Then this file should have foo==1.14.0 -google-api-core==1.31.5 -grpc-google-iam-v1==0.12.4 -proto-plus==1.15.0 -libcst==0.2.5 -protobuf==3.19.0 diff --git a/packages/google-cloud-container/testing/constraints-3.7.txt b/packages/google-cloud-container/testing/constraints-3.7.txt index c4e0fd7dec6c..39a7c58e1e8c 100644 --- a/packages/google-cloud-container/testing/constraints-3.7.txt +++ b/packages/google-cloud-container/testing/constraints-3.7.txt @@ -5,7 +5,7 @@ # # e.g., if setup.py has "foo >= 1.14.0, < 2.0.0dev", # Then this file should have foo==1.14.0 -google-api-core==1.31.5 +google-api-core==1.32.0 grpc-google-iam-v1==0.12.4 proto-plus==1.15.0 libcst==0.2.5 diff --git a/packages/google-cloud-container/tests/unit/gapic/container_v1/test_cluster_manager.py b/packages/google-cloud-container/tests/unit/gapic/container_v1/test_cluster_manager.py index 755bafd3a572..e8b89d3b487a 100644 --- a/packages/google-cloud-container/tests/unit/gapic/container_v1/test_cluster_manager.py +++ b/packages/google-cloud-container/tests/unit/gapic/container_v1/test_cluster_manager.py @@ -31,6 +31,7 @@ from google.auth import credentials as ga_credentials from google.auth.exceptions import MutualTLSChannelError from google.oauth2 import service_account +from google.protobuf import duration_pb2 # type: ignore from google.protobuf import timestamp_pb2 # type: ignore from google.protobuf import wrappers_pb2 # type: ignore from google.rpc import code_pb2 # type: ignore @@ -227,6 +228,7 @@ def test_cluster_manager_client_client_options( quota_project_id=None, client_info=transports.base.DEFAULT_CLIENT_INFO, always_use_jwt_access=True, + api_audience=None, ) # Check the case api_endpoint is not provided and GOOGLE_API_USE_MTLS_ENDPOINT is @@ -244,6 +246,7 @@ def test_cluster_manager_client_client_options( quota_project_id=None, client_info=transports.base.DEFAULT_CLIENT_INFO, always_use_jwt_access=True, + api_audience=None, ) # Check the case api_endpoint is not provided and GOOGLE_API_USE_MTLS_ENDPOINT is @@ -261,6 +264,7 @@ def test_cluster_manager_client_client_options( quota_project_id=None, client_info=transports.base.DEFAULT_CLIENT_INFO, always_use_jwt_access=True, + api_audience=None, ) # Check the case api_endpoint is not provided and GOOGLE_API_USE_MTLS_ENDPOINT has @@ -290,6 +294,25 @@ def test_cluster_manager_client_client_options( quota_project_id="octopus", client_info=transports.base.DEFAULT_CLIENT_INFO, always_use_jwt_access=True, + api_audience=None, + ) + # Check the case api_endpoint is provided + options = client_options.ClientOptions( + api_audience="https://language.googleapis.com" + ) + with mock.patch.object(transport_class, "__init__") as patched: + patched.return_value = None + client = client_class(client_options=options, transport=transport_name) + patched.assert_called_once_with( + credentials=None, + credentials_file=None, + host=client.DEFAULT_ENDPOINT, + scopes=None, + client_cert_source_for_mtls=None, + quota_project_id=None, + client_info=transports.base.DEFAULT_CLIENT_INFO, + always_use_jwt_access=True, + api_audience="https://language.googleapis.com", ) @@ -357,6 +380,7 @@ def test_cluster_manager_client_mtls_env_auto( quota_project_id=None, client_info=transports.base.DEFAULT_CLIENT_INFO, always_use_jwt_access=True, + api_audience=None, ) # Check the case ADC client cert is provided. Whether client cert is used depends on @@ -391,6 +415,7 @@ def test_cluster_manager_client_mtls_env_auto( quota_project_id=None, client_info=transports.base.DEFAULT_CLIENT_INFO, always_use_jwt_access=True, + api_audience=None, ) # Check the case client_cert_source and ADC client cert are not provided. @@ -413,6 +438,7 @@ def test_cluster_manager_client_mtls_env_auto( quota_project_id=None, client_info=transports.base.DEFAULT_CLIENT_INFO, always_use_jwt_access=True, + api_audience=None, ) @@ -527,6 +553,7 @@ def test_cluster_manager_client_client_options_scopes( quota_project_id=None, client_info=transports.base.DEFAULT_CLIENT_INFO, always_use_jwt_access=True, + api_audience=None, ) @@ -565,6 +592,7 @@ def test_cluster_manager_client_client_options_credentials_file( quota_project_id=None, client_info=transports.base.DEFAULT_CLIENT_INFO, always_use_jwt_access=True, + api_audience=None, ) @@ -585,6 +613,7 @@ def test_cluster_manager_client_client_options_from_dict(): quota_project_id=None, client_info=transports.base.DEFAULT_CLIENT_INFO, always_use_jwt_access=True, + api_audience=None, ) @@ -623,6 +652,7 @@ def test_cluster_manager_client_create_channel_credentials_file( quota_project_id=None, client_info=transports.base.DEFAULT_CLIENT_INFO, always_use_jwt_access=True, + api_audience=None, ) # test that the credentials from file are saved and used as the credentials. @@ -6819,6 +6849,157 @@ async def test_delete_node_pool_flattened_error_async(): ) +@pytest.mark.parametrize( + "request_type", + [ + cluster_service.CompleteNodePoolUpgradeRequest, + dict, + ], +) +def test_complete_node_pool_upgrade(request_type, transport: str = "grpc"): + client = ClusterManagerClient( + credentials=ga_credentials.AnonymousCredentials(), + transport=transport, + ) + + # Everything is optional in proto3 as far as the runtime is concerned, + # and we are mocking out the actual API, so just send an empty request. + request = request_type() + + # Mock the actual call within the gRPC stub, and fake the request. + with mock.patch.object( + type(client.transport.complete_node_pool_upgrade), "__call__" + ) as call: + # Designate an appropriate return value for the call. + call.return_value = None + response = client.complete_node_pool_upgrade(request) + + # Establish that the underlying gRPC stub method was called. + assert len(call.mock_calls) == 1 + _, args, _ = call.mock_calls[0] + assert args[0] == cluster_service.CompleteNodePoolUpgradeRequest() + + # Establish that the response is the type that we expect. + assert response is None + + +def test_complete_node_pool_upgrade_empty_call(): + # This test is a coverage failsafe to make sure that totally empty calls, + # i.e. request == None and no flattened fields passed, work. + client = ClusterManagerClient( + credentials=ga_credentials.AnonymousCredentials(), + transport="grpc", + ) + + # Mock the actual call within the gRPC stub, and fake the request. + with mock.patch.object( + type(client.transport.complete_node_pool_upgrade), "__call__" + ) as call: + client.complete_node_pool_upgrade() + call.assert_called() + _, args, _ = call.mock_calls[0] + assert args[0] == cluster_service.CompleteNodePoolUpgradeRequest() + + +@pytest.mark.asyncio +async def test_complete_node_pool_upgrade_async( + transport: str = "grpc_asyncio", + request_type=cluster_service.CompleteNodePoolUpgradeRequest, +): + client = ClusterManagerAsyncClient( + credentials=ga_credentials.AnonymousCredentials(), + transport=transport, + ) + + # Everything is optional in proto3 as far as the runtime is concerned, + # and we are mocking out the actual API, so just send an empty request. + request = request_type() + + # Mock the actual call within the gRPC stub, and fake the request. + with mock.patch.object( + type(client.transport.complete_node_pool_upgrade), "__call__" + ) as call: + # Designate an appropriate return value for the call. + call.return_value = grpc_helpers_async.FakeUnaryUnaryCall(None) + response = await client.complete_node_pool_upgrade(request) + + # Establish that the underlying gRPC stub method was called. + assert len(call.mock_calls) + _, args, _ = call.mock_calls[0] + assert args[0] == cluster_service.CompleteNodePoolUpgradeRequest() + + # Establish that the response is the type that we expect. + assert response is None + + +@pytest.mark.asyncio +async def test_complete_node_pool_upgrade_async_from_dict(): + await test_complete_node_pool_upgrade_async(request_type=dict) + + +def test_complete_node_pool_upgrade_field_headers(): + client = ClusterManagerClient( + credentials=ga_credentials.AnonymousCredentials(), + ) + + # Any value that is part of the HTTP/1.1 URI should be sent as + # a field header. Set these to a non-empty value. + request = cluster_service.CompleteNodePoolUpgradeRequest() + + request.name = "name_value" + + # Mock the actual call within the gRPC stub, and fake the request. + with mock.patch.object( + type(client.transport.complete_node_pool_upgrade), "__call__" + ) as call: + call.return_value = None + client.complete_node_pool_upgrade(request) + + # Establish that the underlying gRPC stub method was called. + assert len(call.mock_calls) == 1 + _, args, _ = call.mock_calls[0] + assert args[0] == request + + # Establish that the field header was sent. + _, _, kw = call.mock_calls[0] + assert ( + "x-goog-request-params", + "name=name_value", + ) in kw["metadata"] + + +@pytest.mark.asyncio +async def test_complete_node_pool_upgrade_field_headers_async(): + client = ClusterManagerAsyncClient( + credentials=ga_credentials.AnonymousCredentials(), + ) + + # Any value that is part of the HTTP/1.1 URI should be sent as + # a field header. Set these to a non-empty value. + request = cluster_service.CompleteNodePoolUpgradeRequest() + + request.name = "name_value" + + # Mock the actual call within the gRPC stub, and fake the request. + with mock.patch.object( + type(client.transport.complete_node_pool_upgrade), "__call__" + ) as call: + call.return_value = grpc_helpers_async.FakeUnaryUnaryCall(None) + await client.complete_node_pool_upgrade(request) + + # Establish that the underlying gRPC stub method was called. + assert len(call.mock_calls) + _, args, _ = call.mock_calls[0] + assert args[0] == request + + # Establish that the field header was sent. + _, _, kw = call.mock_calls[0] + assert ( + "x-goog-request-params", + "name=name_value", + ) in kw["metadata"] + + @pytest.mark.parametrize( "request_type", [ @@ -9900,6 +10081,7 @@ def test_cluster_manager_base_transport(): "get_node_pool", "create_node_pool", "delete_node_pool", + "complete_node_pool_upgrade", "rollback_node_pool_upgrade", "set_node_pool_management", "set_labels", @@ -9991,6 +10173,28 @@ def test_cluster_manager_transport_auth_adc(transport_class): ) +@pytest.mark.parametrize( + "transport_class", + [ + transports.ClusterManagerGrpcTransport, + transports.ClusterManagerGrpcAsyncIOTransport, + ], +) +def test_cluster_manager_transport_auth_gdch_credentials(transport_class): + host = "https://language.com" + api_audience_tests = [None, "https://language2.com"] + api_audience_expect = [host, "https://language2.com"] + for t, e in zip(api_audience_tests, api_audience_expect): + with mock.patch.object(google.auth, "default", autospec=True) as adc: + gdch_mock = mock.MagicMock() + type(gdch_mock).with_gdch_audience = mock.PropertyMock( + return_value=gdch_mock + ) + adc.return_value = (gdch_mock, None) + transport_class(host=host, api_audience=t) + gdch_mock.with_gdch_audience.assert_called_once_with(e) + + @pytest.mark.parametrize( "transport_class,grpc_helpers", [ @@ -10456,4 +10660,5 @@ def test_api_key_credentials(client_class, transport_class): quota_project_id=None, client_info=transports.base.DEFAULT_CLIENT_INFO, always_use_jwt_access=True, + api_audience=None, ) diff --git a/packages/google-cloud-container/tests/unit/gapic/container_v1beta1/test_cluster_manager.py b/packages/google-cloud-container/tests/unit/gapic/container_v1beta1/test_cluster_manager.py index f06b1a11d2fd..ee4a5380d806 100644 --- a/packages/google-cloud-container/tests/unit/gapic/container_v1beta1/test_cluster_manager.py +++ b/packages/google-cloud-container/tests/unit/gapic/container_v1beta1/test_cluster_manager.py @@ -31,6 +31,7 @@ from google.auth import credentials as ga_credentials from google.auth.exceptions import MutualTLSChannelError from google.oauth2 import service_account +from google.protobuf import duration_pb2 # type: ignore from google.protobuf import timestamp_pb2 # type: ignore from google.protobuf import wrappers_pb2 # type: ignore from google.rpc import code_pb2 # type: ignore @@ -227,6 +228,7 @@ def test_cluster_manager_client_client_options( quota_project_id=None, client_info=transports.base.DEFAULT_CLIENT_INFO, always_use_jwt_access=True, + api_audience=None, ) # Check the case api_endpoint is not provided and GOOGLE_API_USE_MTLS_ENDPOINT is @@ -244,6 +246,7 @@ def test_cluster_manager_client_client_options( quota_project_id=None, client_info=transports.base.DEFAULT_CLIENT_INFO, always_use_jwt_access=True, + api_audience=None, ) # Check the case api_endpoint is not provided and GOOGLE_API_USE_MTLS_ENDPOINT is @@ -261,6 +264,7 @@ def test_cluster_manager_client_client_options( quota_project_id=None, client_info=transports.base.DEFAULT_CLIENT_INFO, always_use_jwt_access=True, + api_audience=None, ) # Check the case api_endpoint is not provided and GOOGLE_API_USE_MTLS_ENDPOINT has @@ -290,6 +294,25 @@ def test_cluster_manager_client_client_options( quota_project_id="octopus", client_info=transports.base.DEFAULT_CLIENT_INFO, always_use_jwt_access=True, + api_audience=None, + ) + # Check the case api_endpoint is provided + options = client_options.ClientOptions( + api_audience="https://language.googleapis.com" + ) + with mock.patch.object(transport_class, "__init__") as patched: + patched.return_value = None + client = client_class(client_options=options, transport=transport_name) + patched.assert_called_once_with( + credentials=None, + credentials_file=None, + host=client.DEFAULT_ENDPOINT, + scopes=None, + client_cert_source_for_mtls=None, + quota_project_id=None, + client_info=transports.base.DEFAULT_CLIENT_INFO, + always_use_jwt_access=True, + api_audience="https://language.googleapis.com", ) @@ -357,6 +380,7 @@ def test_cluster_manager_client_mtls_env_auto( quota_project_id=None, client_info=transports.base.DEFAULT_CLIENT_INFO, always_use_jwt_access=True, + api_audience=None, ) # Check the case ADC client cert is provided. Whether client cert is used depends on @@ -391,6 +415,7 @@ def test_cluster_manager_client_mtls_env_auto( quota_project_id=None, client_info=transports.base.DEFAULT_CLIENT_INFO, always_use_jwt_access=True, + api_audience=None, ) # Check the case client_cert_source and ADC client cert are not provided. @@ -413,6 +438,7 @@ def test_cluster_manager_client_mtls_env_auto( quota_project_id=None, client_info=transports.base.DEFAULT_CLIENT_INFO, always_use_jwt_access=True, + api_audience=None, ) @@ -527,6 +553,7 @@ def test_cluster_manager_client_client_options_scopes( quota_project_id=None, client_info=transports.base.DEFAULT_CLIENT_INFO, always_use_jwt_access=True, + api_audience=None, ) @@ -565,6 +592,7 @@ def test_cluster_manager_client_client_options_credentials_file( quota_project_id=None, client_info=transports.base.DEFAULT_CLIENT_INFO, always_use_jwt_access=True, + api_audience=None, ) @@ -585,6 +613,7 @@ def test_cluster_manager_client_client_options_from_dict(): quota_project_id=None, client_info=transports.base.DEFAULT_CLIENT_INFO, always_use_jwt_access=True, + api_audience=None, ) @@ -623,6 +652,7 @@ def test_cluster_manager_client_create_channel_credentials_file( quota_project_id=None, client_info=transports.base.DEFAULT_CLIENT_INFO, always_use_jwt_access=True, + api_audience=None, ) # test that the credentials from file are saved and used as the credentials. @@ -6657,6 +6687,157 @@ async def test_delete_node_pool_flattened_error_async(): ) +@pytest.mark.parametrize( + "request_type", + [ + cluster_service.CompleteNodePoolUpgradeRequest, + dict, + ], +) +def test_complete_node_pool_upgrade(request_type, transport: str = "grpc"): + client = ClusterManagerClient( + credentials=ga_credentials.AnonymousCredentials(), + transport=transport, + ) + + # Everything is optional in proto3 as far as the runtime is concerned, + # and we are mocking out the actual API, so just send an empty request. + request = request_type() + + # Mock the actual call within the gRPC stub, and fake the request. + with mock.patch.object( + type(client.transport.complete_node_pool_upgrade), "__call__" + ) as call: + # Designate an appropriate return value for the call. + call.return_value = None + response = client.complete_node_pool_upgrade(request) + + # Establish that the underlying gRPC stub method was called. + assert len(call.mock_calls) == 1 + _, args, _ = call.mock_calls[0] + assert args[0] == cluster_service.CompleteNodePoolUpgradeRequest() + + # Establish that the response is the type that we expect. + assert response is None + + +def test_complete_node_pool_upgrade_empty_call(): + # This test is a coverage failsafe to make sure that totally empty calls, + # i.e. request == None and no flattened fields passed, work. + client = ClusterManagerClient( + credentials=ga_credentials.AnonymousCredentials(), + transport="grpc", + ) + + # Mock the actual call within the gRPC stub, and fake the request. + with mock.patch.object( + type(client.transport.complete_node_pool_upgrade), "__call__" + ) as call: + client.complete_node_pool_upgrade() + call.assert_called() + _, args, _ = call.mock_calls[0] + assert args[0] == cluster_service.CompleteNodePoolUpgradeRequest() + + +@pytest.mark.asyncio +async def test_complete_node_pool_upgrade_async( + transport: str = "grpc_asyncio", + request_type=cluster_service.CompleteNodePoolUpgradeRequest, +): + client = ClusterManagerAsyncClient( + credentials=ga_credentials.AnonymousCredentials(), + transport=transport, + ) + + # Everything is optional in proto3 as far as the runtime is concerned, + # and we are mocking out the actual API, so just send an empty request. + request = request_type() + + # Mock the actual call within the gRPC stub, and fake the request. + with mock.patch.object( + type(client.transport.complete_node_pool_upgrade), "__call__" + ) as call: + # Designate an appropriate return value for the call. + call.return_value = grpc_helpers_async.FakeUnaryUnaryCall(None) + response = await client.complete_node_pool_upgrade(request) + + # Establish that the underlying gRPC stub method was called. + assert len(call.mock_calls) + _, args, _ = call.mock_calls[0] + assert args[0] == cluster_service.CompleteNodePoolUpgradeRequest() + + # Establish that the response is the type that we expect. + assert response is None + + +@pytest.mark.asyncio +async def test_complete_node_pool_upgrade_async_from_dict(): + await test_complete_node_pool_upgrade_async(request_type=dict) + + +def test_complete_node_pool_upgrade_field_headers(): + client = ClusterManagerClient( + credentials=ga_credentials.AnonymousCredentials(), + ) + + # Any value that is part of the HTTP/1.1 URI should be sent as + # a field header. Set these to a non-empty value. + request = cluster_service.CompleteNodePoolUpgradeRequest() + + request.name = "name_value" + + # Mock the actual call within the gRPC stub, and fake the request. + with mock.patch.object( + type(client.transport.complete_node_pool_upgrade), "__call__" + ) as call: + call.return_value = None + client.complete_node_pool_upgrade(request) + + # Establish that the underlying gRPC stub method was called. + assert len(call.mock_calls) == 1 + _, args, _ = call.mock_calls[0] + assert args[0] == request + + # Establish that the field header was sent. + _, _, kw = call.mock_calls[0] + assert ( + "x-goog-request-params", + "name=name_value", + ) in kw["metadata"] + + +@pytest.mark.asyncio +async def test_complete_node_pool_upgrade_field_headers_async(): + client = ClusterManagerAsyncClient( + credentials=ga_credentials.AnonymousCredentials(), + ) + + # Any value that is part of the HTTP/1.1 URI should be sent as + # a field header. Set these to a non-empty value. + request = cluster_service.CompleteNodePoolUpgradeRequest() + + request.name = "name_value" + + # Mock the actual call within the gRPC stub, and fake the request. + with mock.patch.object( + type(client.transport.complete_node_pool_upgrade), "__call__" + ) as call: + call.return_value = grpc_helpers_async.FakeUnaryUnaryCall(None) + await client.complete_node_pool_upgrade(request) + + # Establish that the underlying gRPC stub method was called. + assert len(call.mock_calls) + _, args, _ = call.mock_calls[0] + assert args[0] == request + + # Establish that the field header was sent. + _, _, kw = call.mock_calls[0] + assert ( + "x-goog-request-params", + "name=name_value", + ) in kw["metadata"] + + @pytest.mark.parametrize( "request_type", [ @@ -10245,6 +10426,7 @@ def test_cluster_manager_base_transport(): "get_node_pool", "create_node_pool", "delete_node_pool", + "complete_node_pool_upgrade", "rollback_node_pool_upgrade", "set_node_pool_management", "set_labels", @@ -10337,6 +10519,28 @@ def test_cluster_manager_transport_auth_adc(transport_class): ) +@pytest.mark.parametrize( + "transport_class", + [ + transports.ClusterManagerGrpcTransport, + transports.ClusterManagerGrpcAsyncIOTransport, + ], +) +def test_cluster_manager_transport_auth_gdch_credentials(transport_class): + host = "https://language.com" + api_audience_tests = [None, "https://language2.com"] + api_audience_expect = [host, "https://language2.com"] + for t, e in zip(api_audience_tests, api_audience_expect): + with mock.patch.object(google.auth, "default", autospec=True) as adc: + gdch_mock = mock.MagicMock() + type(gdch_mock).with_gdch_audience = mock.PropertyMock( + return_value=gdch_mock + ) + adc.return_value = (gdch_mock, None) + transport_class(host=host, api_audience=t) + gdch_mock.with_gdch_audience.assert_called_once_with(e) + + @pytest.mark.parametrize( "transport_class,grpc_helpers", [ @@ -10802,4 +11006,5 @@ def test_api_key_credentials(client_class, transport_class): quota_project_id=None, client_info=transports.base.DEFAULT_CLIENT_INFO, always_use_jwt_access=True, + api_audience=None, )