def SetTraffic(self, service_ref, config_changes, tracker, asyn,
                   is_managed):
        """Set traffic splits for service."""
        if tracker is None:
            tracker = progress_tracker.NoOpStagedProgressTracker(
                stages.ServiceStages(False),
                interruptable=True,
                abortde_message='aborted')
        serv = self.GetService(service_ref)
        if not serv:
            raise serverless_exceptions.ServiceNotFoundError(
                'Service [{}] could not be found.'.format(
                    service_ref.servicesId))

        if not serv.spec.template:
            if is_managed:
                raise serverless_exceptions.UnsupportedOperationError(
                    'Your provider does not support setting traffic for this service.'
                )
            else:
                raise serverless_exceptions.UnsupportedOperationError(
                    'You must upgrade your cluster to version 0.61 or greater '
                    'to set traffic.')
        self._UpdateOrCreateService(service_ref, config_changes, False, serv)

        if not asyn:
            getter = functools.partial(self.GetService, service_ref)
            self.WaitForCondition(ServiceConditionPoller(getter, tracker))
    def UpdateTraffic(self, service_ref, config_changes, tracker, asyn):
        """Update traffic splits for service."""
        if tracker is None:
            tracker = progress_tracker.NoOpStagedProgressTracker(
                stages.UpdateTrafficStages(),
                interruptable=True,
                aborted_message='aborted')
        serv = self.GetService(service_ref)
        if not serv:
            raise serverless_exceptions.ServiceNotFoundError(
                'Service [{}] could not be found.'.format(
                    service_ref.servicesId))

        if serv.configuration:
            raise serverless_exceptions.UnsupportedOperationError(
                'This service is using an old version of Cloud Run for Anthos '
                'that does not support traffic features. Please upgrade to 0.8 '
                'or later.')

        self._UpdateOrCreateService(service_ref, config_changes, False, serv)

        if not asyn:
            getter = functools.partial(self.GetService, service_ref)
            self.WaitForCondition(
                ServiceConditionPoller(getter, tracker, serv=serv))
  def Adjust(self, resource):
    """Removes LATEST from the services traffic assignments."""
    if resource.configuration:
      raise exceptions.UnsupportedOperationError(
          'This service is using an old version of Cloud Run for Anthos '
          'that does not support traffic features. Please upgrade to 0.8 '
          'or later.')

    if not resource.generation:
      raise exceptions.ConfigurationError(
          '--no-traffic not supported when creating a new service.')

    resource.traffic.ZeroLatestTraffic(resource.status.latestReadyRevisionName)
    return resource