def _PerformRollback(self, deployment_name, error_message): # Print information about the failure. log.warn('There was an error deploying ' + deployment_name + ':\n' + error_message) log.status.Print('`--automatic-rollback-on-error` flag was supplied; ' 'deleting failed deployment...') # Delete the deployment. try: delete_operation = self.client.deployments.Delete( self.messages.DeploymentmanagerDeploymentsDeleteRequest( project=dm_base.GetProject(), deployment=deployment_name, ) ) except apitools_exceptions.HttpError as error: raise exceptions.HttpException(error, dm_api_util.HTTP_ERROR_FORMAT) # TODO(b/37481635): Use gcloud default operation polling. dm_write.WaitForOperation(self.client, self.messages, delete_operation.name, 'delete', dm_base.GetProject(), timeout=OPERATION_TIMEOUT) completed_operation = dm_api_util.GetOperation(self.client, self.messages, delete_operation, dm_base.GetProject()) return completed_operation
def _HandleOperationError(self, error, args, operation, project): if args.automatic_rollback: delete_operation = self._PerformRollback(args.deployment_name, str(error)) create_operation = dm_api_util.GetOperation( self.client, self.messages, operation, project) return [create_operation, delete_operation] raise error