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
예제 #2
0
    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