Esempio n. 1
0
    def test_update_cluster(self):
        # Setup Expected Response
        project_id_2 = 'projectId2939242356'
        cluster_name_2 = 'clusterName2875867491'
        cluster_uuid = 'clusterUuid-1017854240'
        expected_response = {
            'project_id': project_id_2,
            'cluster_name': cluster_name_2,
            'cluster_uuid': cluster_uuid
        }
        expected_response = clusters_pb2.Cluster(**expected_response)
        operation = operations_pb2.Operation(
            name='operations/test_update_cluster', done=True)
        operation.response.Pack(expected_response)

        # Mock the API response
        channel = ChannelStub(responses=[operation])
        patch = mock.patch('google.api_core.grpc_helpers.create_channel')
        with patch as create_channel:
            create_channel.return_value = channel
            client = dataproc_v1.ClusterControllerClient()

        # Setup Request
        project_id = 'projectId-1969970175'
        region = 'region-934795532'
        cluster_name = 'clusterName-1018081872'
        cluster = {}
        update_mask = {}

        response = client.update_cluster(project_id, region, cluster_name,
                                         cluster, update_mask)
        result = response.result()
        assert expected_response == result

        assert len(channel.requests) == 1
        expected_request = clusters_pb2.UpdateClusterRequest(
            project_id=project_id,
            region=region,
            cluster_name=cluster_name,
            cluster=cluster,
            update_mask=update_mask)
        actual_request = channel.requests[0][1]
        assert expected_request == actual_request
Esempio n. 2
0
    def update_cluster(
        self,
        project_id,
        region,
        cluster_name,
        cluster,
        update_mask,
        graceful_decommission_timeout=None,
        request_id=None,
        retry=google.api_core.gapic_v1.method.DEFAULT,
        timeout=google.api_core.gapic_v1.method.DEFAULT,
        metadata=None,
    ):
        """
        Updates a cluster in a project.

        Example:
            >>> from google.cloud import dataproc_v1
            >>>
            >>> client = dataproc_v1.ClusterControllerClient()
            >>>
            >>> # TODO: Initialize `project_id`:
            >>> project_id = ''
            >>>
            >>> # TODO: Initialize `region`:
            >>> region = ''
            >>>
            >>> # TODO: Initialize `cluster_name`:
            >>> cluster_name = ''
            >>>
            >>> # TODO: Initialize `cluster`:
            >>> cluster = {}
            >>>
            >>> # TODO: Initialize `update_mask`:
            >>> update_mask = {}
            >>>
            >>> response = client.update_cluster(project_id, region, cluster_name, cluster, update_mask)
            >>>
            >>> def callback(operation_future):
            ...     # Handle result.
            ...     result = operation_future.result()
            >>>
            >>> response.add_done_callback(callback)
            >>>
            >>> # Handle metadata.
            >>> metadata = response.metadata()

        Args:
            project_id (str): Required. The ID of the Google Cloud Platform project the
                cluster belongs to.
            region (str): Required. The Cloud Dataproc region in which to handle the request.
            cluster_name (str): Required. The cluster name.
            cluster (Union[dict, ~google.cloud.dataproc_v1.types.Cluster]): Required. The changes to the cluster.

                If a dict is provided, it must be of the same form as the protobuf
                message :class:`~google.cloud.dataproc_v1.types.Cluster`
            update_mask (Union[dict, ~google.cloud.dataproc_v1.types.FieldMask]): Required. Specifies the path, relative to ``Cluster``, of the field to
                update. For example, to change the number of workers in a cluster to 5,
                the ``update_mask`` parameter would be specified as
                ``config.worker_config.num_instances``, and the ``PATCH`` request body
                would specify the new value, as follows:

                ::

                     {
                       "config":{
                         "workerConfig":{
                           "numInstances":"5"
                         }
                       }
                     }

                Similarly, to change the number of preemptible workers in a cluster to
                5, the ``update_mask`` parameter would be
                ``config.secondary_worker_config.num_instances``, and the ``PATCH``
                request body would be set as follows:

                ::

                     {
                       "config":{
                         "secondaryWorkerConfig":{
                           "numInstances":"5"
                         }
                       }
                     }

                Note: Currently, only the following fields can be updated:

                .. raw:: html

                     <table>
                     <tbody>
                     <tr>
                     <td><strong>Mask</strong></td>
                     <td><strong>Purpose</strong></td>
                     </tr>
                     <tr>
                     <td><strong><em>labels</em></strong></td>
                     <td>Update labels</td>
                     </tr>
                     <tr>
                     <td><strong><em>config.worker_config.num_instances</em></strong></td>
                     <td>Resize primary worker group</td>
                     </tr>
                     <tr>
                     <td><strong><em>config.secondary_worker_config.num_instances</em></strong></td>
                     <td>Resize secondary worker group</td>
                     </tr>
                     </tbody>
                     </table>

                If a dict is provided, it must be of the same form as the protobuf
                message :class:`~google.cloud.dataproc_v1.types.FieldMask`
            graceful_decommission_timeout (Union[dict, ~google.cloud.dataproc_v1.types.Duration]): Optional. Timeout for graceful YARN decomissioning. Graceful
                decommissioning allows removing nodes from the cluster without
                interrupting jobs in progress. Timeout specifies how long to wait for jobs
                in progress to finish before forcefully removing nodes (and potentially
                interrupting jobs). Default timeout is 0 (for forceful decommission), and
                the maximum allowed timeout is 1 day.

                Only supported on Dataproc image versions 1.2 and higher.

                If a dict is provided, it must be of the same form as the protobuf
                message :class:`~google.cloud.dataproc_v1.types.Duration`
            request_id (str): Optional. A unique id used to identify the request. If the server
                receives two ``UpdateClusterRequest`` requests with the same id, then
                the second request will be ignored and the first
                ``google.longrunning.Operation`` created and stored in the backend is
                returned.

                It is recommended to always set this value to a
                `UUID <https://en.wikipedia.org/wiki/Universally_unique_identifier>`__.

                The id must contain only letters (a-z, A-Z), numbers (0-9), underscores
                (\_), and hyphens (-). The maximum length is 40 characters.
            retry (Optional[google.api_core.retry.Retry]):  A retry object used
                to retry requests. If ``None`` is specified, requests will
                be retried using a default configuration.
            timeout (Optional[float]): The amount of time, in seconds, to wait
                for the request to complete. Note that if ``retry`` is
                specified, the timeout applies to each individual attempt.
            metadata (Optional[Sequence[Tuple[str, str]]]): Additional metadata
                that is provided to the method.

        Returns:
            A :class:`~google.cloud.dataproc_v1.types._OperationFuture` instance.

        Raises:
            google.api_core.exceptions.GoogleAPICallError: If the request
                    failed for any reason.
            google.api_core.exceptions.RetryError: If the request failed due
                    to a retryable error and retry attempts failed.
            ValueError: If the parameters are invalid.
        """
        # Wrap the transport method to add retry and timeout logic.
        if "update_cluster" not in self._inner_api_calls:
            self._inner_api_calls[
                "update_cluster"] = google.api_core.gapic_v1.method.wrap_method(
                    self.transport.update_cluster,
                    default_retry=self._method_configs["UpdateCluster"].retry,
                    default_timeout=self._method_configs["UpdateCluster"].
                    timeout,
                    client_info=self._client_info,
                )

        request = clusters_pb2.UpdateClusterRequest(
            project_id=project_id,
            region=region,
            cluster_name=cluster_name,
            cluster=cluster,
            update_mask=update_mask,
            graceful_decommission_timeout=graceful_decommission_timeout,
            request_id=request_id,
        )
        operation = self._inner_api_calls["update_cluster"](request,
                                                            retry=retry,
                                                            timeout=timeout,
                                                            metadata=metadata)
        return google.api_core.operation.from_gapic(
            operation,
            self.transport._operations_client,
            clusters_pb2.Cluster,
            metadata_type=proto_operations_pb2.ClusterOperationMetadata,
        )
Esempio n. 3
0
    def update_cluster(self,
                       project_id,
                       region,
                       cluster_name,
                       cluster,
                       update_mask,
                       retry=google.api_core.gapic_v1.method.DEFAULT,
                       timeout=google.api_core.gapic_v1.method.DEFAULT,
                       metadata=None):
        """
        Updates a cluster in a project.

        Example:
            >>> from google.cloud import dataproc_v1
            >>>
            >>> client = dataproc_v1.ClusterControllerClient()
            >>>
            >>> # TODO: Initialize `project_id`:
            >>> project_id = ''
            >>>
            >>> # TODO: Initialize `region`:
            >>> region = ''
            >>>
            >>> # TODO: Initialize `cluster_name`:
            >>> cluster_name = ''
            >>>
            >>> # TODO: Initialize `cluster`:
            >>> cluster = {}
            >>>
            >>> # TODO: Initialize `update_mask`:
            >>> update_mask = {}
            >>>
            >>> response = client.update_cluster(project_id, region, cluster_name, cluster, update_mask)
            >>>
            >>> def callback(operation_future):
            ...     # Handle result.
            ...     result = operation_future.result()
            >>>
            >>> response.add_done_callback(callback)
            >>>
            >>> # Handle metadata.
            >>> metadata = response.metadata()

        Args:
            project_id (str): Required. The ID of the Google Cloud Platform project the
                cluster belongs to.
            region (str): Required. The Cloud Dataproc region in which to handle the request.
            cluster_name (str): Required. The cluster name.
            cluster (Union[dict, ~google.cloud.dataproc_v1.types.Cluster]): Required. The changes to the cluster.

                If a dict is provided, it must be of the same form as the protobuf
                message :class:`~google.cloud.dataproc_v1.types.Cluster`
            update_mask (Union[dict, ~google.cloud.dataproc_v1.types.FieldMask]): Required. Specifies the path, relative to ``Cluster``, of the field to
                update. For example, to change the number of workers in a cluster to 5,
                the ``update_mask`` parameter would be specified as
                ``config.worker_config.num_instances``, and the ``PATCH`` request body
                would specify the new value, as follows:

                ::

                     {
                       "config":{
                         "workerConfig":{
                           "numInstances":"5"
                         }
                       }
                     }

                Similarly, to change the number of preemptible workers in a cluster to
                5, the ``update_mask`` parameter would be
                ``config.secondary_worker_config.num_instances``, and the ``PATCH``
                request body would be set as follows:

                ::

                     {
                       "config":{
                         "secondaryWorkerConfig":{
                           "numInstances":"5"
                         }
                       }
                     }

                Note: Currently, only the following fields can be updated:

                .. raw:: html

                   <table>

                .. raw:: html

                   <tbody>

                .. raw:: html

                   <tr>

                .. raw:: html

                   <td>

                Mask

                .. raw:: html

                   </td>

                .. raw:: html

                   <td>

                Purpose

                .. raw:: html

                   </td>

                .. raw:: html

                   </tr>

                .. raw:: html

                   <tr>

                .. raw:: html

                   <td>

                labels

                .. raw:: html

                   </td>

                .. raw:: html

                   <td>

                Update labels

                .. raw:: html

                   </td>

                .. raw:: html

                   </tr>

                .. raw:: html

                   <tr>

                .. raw:: html

                   <td>

                config.worker\_config.num\_instances

                .. raw:: html

                   </td>

                .. raw:: html

                   <td>

                Resize primary worker group

                .. raw:: html

                   </td>

                .. raw:: html

                   </tr>

                .. raw:: html

                   <tr>

                .. raw:: html

                   <td>

                config.secondary\_worker\_config.num\_instances

                .. raw:: html

                   </td>

                .. raw:: html

                   <td>

                Resize secondary worker group

                .. raw:: html

                   </td>

                .. raw:: html

                   </tr>

                .. raw:: html

                   </tbody>

                .. raw:: html

                   </table>

                If a dict is provided, it must be of the same form as the protobuf
                message :class:`~google.cloud.dataproc_v1.types.FieldMask`
            retry (Optional[google.api_core.retry.Retry]):  A retry object used
                to retry requests. If ``None`` is specified, requests will not
                be retried.
            timeout (Optional[float]): The amount of time, in seconds, to wait
                for the request to complete. Note that if ``retry`` is
                specified, the timeout applies to each individual attempt.
            metadata (Optional[Sequence[Tuple[str, str]]]): Additional metadata
                that is provided to the method.

        Returns:
            A :class:`~google.cloud.dataproc_v1.types._OperationFuture` instance.

        Raises:
            google.api_core.exceptions.GoogleAPICallError: If the request
                    failed for any reason.
            google.api_core.exceptions.RetryError: If the request failed due
                    to a retryable error and retry attempts failed.
            ValueError: If the parameters are invalid.
        """
        # Wrap the transport method to add retry and timeout logic.
        if 'update_cluster' not in self._inner_api_calls:
            self._inner_api_calls[
                'update_cluster'] = google.api_core.gapic_v1.method.wrap_method(
                    self.transport.update_cluster,
                    default_retry=self._method_configs['UpdateCluster'].retry,
                    default_timeout=self._method_configs['UpdateCluster'].
                    timeout,
                    client_info=self._client_info,
                )

        request = clusters_pb2.UpdateClusterRequest(
            project_id=project_id,
            region=region,
            cluster_name=cluster_name,
            cluster=cluster,
            update_mask=update_mask,
        )
        operation = self._inner_api_calls['update_cluster'](request,
                                                            retry=retry,
                                                            timeout=timeout,
                                                            metadata=metadata)
        return google.api_core.operation.from_gapic(
            operation,
            self.transport._operations_client,
            clusters_pb2.Cluster,
            metadata_type=proto_operations_pb2.ClusterOperationMetadata,
        )
Esempio n. 4
0
    def update_cluster(self,
                       project_id,
                       region,
                       cluster_name,
                       cluster,
                       update_mask,
                       retry=google.api_core.gapic_v1.method.DEFAULT,
                       timeout=google.api_core.gapic_v1.method.DEFAULT):
        """
        Updates a cluster in a project.

        Example:
            >>> from google.cloud import dataproc_v1
            >>>
            >>> client = dataproc_v1.ClusterControllerClient()
            >>>
            >>> project_id = ''
            >>> region = ''
            >>> cluster_name = ''
            >>> cluster = {}
            >>> update_mask = {}
            >>>
            >>> response = client.update_cluster(project_id, region, cluster_name, cluster, update_mask)
            >>>
            >>> def callback(operation_future):
            ...     # Handle result.
            ...     result = operation_future.result()
            >>>
            >>> response.add_done_callback(callback)
            >>>
            >>> # Handle metadata.
            >>> metadata = response.metadata()

        Args:
            project_id (str): Required. The ID of the Google Cloud Platform project the
                cluster belongs to.
            region (str): Required. The Cloud Dataproc region in which to handle the request.
            cluster_name (str): Required. The cluster name.
            cluster (Union[dict, ~google.cloud.dataproc_v1.types.Cluster]): Required. The changes to the cluster.
                If a dict is provided, it must be of the same form as the protobuf
                message :class:`~google.cloud.dataproc_v1.types.Cluster`
            update_mask (Union[dict, ~google.cloud.dataproc_v1.types.FieldMask]): Required. Specifies the path, relative to ``Cluster``, of
                the field to update. For example, to change the number of workers
                in a cluster to 5, the ``update_mask`` parameter would be
                specified as ``config.worker_config.num_instances``,
                and the ``PATCH`` request body would specify the new value, as follows:

                ::

                    {
                      \"config\":{
                        \"workerConfig\":{
                          \"numInstances\":\"5\"
                        }
                      }
                    }

                Similarly, to change the number of preemptible workers in a cluster to 5,
                the ``update_mask`` parameter would be
                ``config.secondary_worker_config.num_instances``, and the ``PATCH`` request
                body would be set as follows:

                ::

                    {
                      \"config\":{
                        \"secondaryWorkerConfig\":{
                          \"numInstances\":\"5\"
                        }
                      }
                    }

                .. note::

                    Currently, only the following fields can be updated:

                    * ``labels``: Update labels
                    * ``config.worker_config.num_instances``: Resize primary
                      worker group
                    * ``config.secondary_worker_config.num_instances``: Resize
                      secondary worker group

                    If a dict is provided, it must be of the same form as the protobuf
                    message :class:`~google.cloud.dataproc_v1.types.FieldMask`
            retry (Optional[google.api_core.retry.Retry]):  A retry object used
                to retry requests. If ``None`` is specified, requests will not
                be retried.
            timeout (Optional[float]): The amount of time, in seconds, to wait
                for the request to complete. Note that if ``retry`` is
                specified, the timeout applies to each individual attempt.

        Returns:
            A :class:`~google.cloud.dataproc_v1.types._OperationFuture` instance.

        Raises:
            google.api_core.exceptions.GoogleAPICallError: If the request
                    failed for any reason.
            google.api_core.exceptions.RetryError: If the request failed due
                    to a retryable error and retry attempts failed.
            ValueError: If the parameters are invalid.
        """
        request = clusters_pb2.UpdateClusterRequest(
            project_id=project_id,
            region=region,
            cluster_name=cluster_name,
            cluster=cluster,
            update_mask=update_mask,
        )
        operation = self._update_cluster(request, retry=retry, timeout=timeout)
        return google.api_core.operation.from_gapic(
            operation,
            self.operations_client,
            clusters_pb2.Cluster,
            metadata_type=operations_pb2.ClusterOperationMetadata,
        )